Michael and Claude Sonnet 4.6
b353fb6ded
fix: use relative URLs for local media storage to fix CSP blocking
...
Media files were stored with absolute http://localhost:5555/ ... URLs,
which got blocked by the Content Security Policy when the app runs at
https://socialflow.fnancy.fr . Now stores relative /uploads/... paths
and resolves to absolute URLs only when needed by external APIs
(Facebook, FFmpeg internal service).
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-03-25 08:30:07 +01:00
Michael and Claude Sonnet 4.6
7733acbc22
feat: Replace external storage with local file storage + auto cleanup
...
Media is now stored directly on the server disk (no external service).
Files are served via Express static middleware at /uploads/*.
Cleanup rules:
- Videos deleted immediately after successful publish to Facebook/Instagram
- Videos older than 7 days purged daily by cron job
- Images older than 30 days purged daily by cron job
Changes:
- server/services/minio.ts: replaced S3 client with local fs read/write
- server/index.ts: added static serving for /uploads/media, /logos, /stories
- server/services/media-purge.ts: new rules (images 30d, videos 7d)
- server/services/scheduler.ts: delete local videos after successful publish
- docker-compose.yml: add media_uploads, logos_uploads, stories_uploads volumes
- settings UI: removed credentials card, shows local storage info
- package.json: removed googleapis (unneeded)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-03-25 07:35:27 +01:00
Michael and Claude Sonnet 4.6
ba94e7cc7d
feat: Add MinIO endpoint/public URL configuration via settings UI
...
Store endpointUrl and publicUrl in cloudinary_config DB table so
MinIO connection can be fully configured from the app settings
without needing environment variables.
- DB migration: adds endpoint_url and public_url columns
- Schema: adds endpointUrl/publicUrl to cloudinaryConfig table
- MinIO service: reads endpoint from DB (falls back to MINIO_ENDPOINT env)
- buildMinioUrl: accepts optional publicUrl override from DB config
- All routes updated to pass config.publicUrl to buildMinioUrl
- Settings UI (desktop + mobile): adds Endpoint URL and Public URL fields
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-03-24 21:19:49 +01:00
Michael and Claude Sonnet 4.6
e39fa1026d
feat: replace Cloudinary with MinIO for all media storage
...
- Create server/services/minio.ts: S3-compatible service (same interface as
cloudinaryService) using @aws-sdk/client-s3 and MINIO_ENDPOINT env var
- Replace all cloudinaryService imports with minioService across routes.ts,
routes/reels.ts, routes/remotion.ts, services/media-purge.ts
- Replace Cloudinary logo URL pattern (res.cloudinary.com/...) with
buildMinioUrl() helper throughout all server routes
- GET /api/cloudinary/config now returns a logoUrl field (full MinIO URL)
so clients never need to build the URL themselves
- Update settings pages (desktop + mobile): labels changed to MinIO
(Bucket Name, Access Key, Secret Key)
- Update image-editor.tsx: remove Cloudinary URL transformation, use logoUrl
- Update media-utils.ts: simplify getVideoThumbnailUrl (no URL transforms)
- Add MINIO_ENDPOINT and MINIO_PUBLIC_URL to docker-compose.yml + .env.example
- DB table reuse: cloudinary_config.cloud_name = bucket, api_key = access key,
api_secret = secret key — no migration needed
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-03-24 21:05:37 +01:00
Michael
3a5acd425c
feat: Implement new Reel creation functionality with dedicated mobile and desktop UIs, server-side API routes, and a new FFmpeg processing service.
2026-03-19 14:51:16 +01:00
Michael
a01194cc79
fix(cloudinary): correct method name to getCloudinaryConfig across backend
2026-03-04 14:45:38 +01:00
Michael
60c830c88b
feat: implement automatic purging of old media and schedule its daily execution via cron.
2026-03-04 14:32:27 +01:00
Michael
4fcc8cf53c
feat: Add music search and favorite API routes, and introduce FFmpeg service for Reels.
2026-03-03 12:34:09 +01:00
Michael
0e9622b5eb
feat: Implement internal MP3 management and logo overlay functionality for Reels.
2026-03-02 11:33:22 +01:00
Michael
3859170d35
fix(analytics): upsert history one data point per day per page, add gte/lt imports
2026-02-12 11:01:43 +01:00
Michael
330c42c6ff
feat(analytics): resilient Graph API calls, CRON sync every 6h, polling frontend, engagement+views metrics
2026-02-12 10:51:06 +01:00
Michael
4b5ab1ca16
feat: enable feed distribution for Reels via /videos endpoint
2026-02-10 11:11:42 +01:00
Michael
c9f7f7e9ec
fix: ensure persistence of video data for scheduled reels and correct publication type
2026-01-29 11:58:29 +01:00
Michael
7223bbbfb2
feat(reels): optimize quality to 1080p, increase text size to 64, and add stabilization toggle
2026-01-23 17:19:32 +01:00
Michael
891b374500
feat: support large file uploads up to 4GB (disk storage + streaming)
2026-01-23 16:27:27 +01:00
Michael
aac776777a
feat(reels): add video stabilization, quality improvements and processing monitoring
2026-01-23 13:42:42 +01:00
Michael
9ff1c4aa18
feat: enhance reels with default overlay, more voices, and tts preview
2026-01-23 09:38:59 +01:00
Jacques
fe638b9895
fix: reduce font size to 16, improve TTS sync (3 words/chunk, 0.3s/word)
2026-01-22 21:39:06 +01:00
Jacques
e9ff262991
fix(ffmpeg): reduce hardcoded font_size from 60 to 24 for smaller text overlay
2026-01-22 21:22:36 +01:00
Michael
77a6dd7188
fix
2026-01-22 16:58:12 +01:00
Michael
23abe41903
fix tts and texte on vidéo
2026-01-22 16:20:56 +01:00
Michael
9ffd92f6bf
add TTS voice
2026-01-22 15:28:00 +01:00
Michael
973bf5186c
feat: Replace Jamendo with FreeSound API for Reel music
2026-01-22 12:31:30 +01:00
Michael
3d494d4056
feat: Add Facebook Reels with music and text overlay - Add ffmpeg.ts service for Docker FFmpeg API integration - Add jamendo.ts service for royalty-free music search - Add publishReel methods to facebook.ts - Add reels API routes (music search, AI text generation, create/preview) - Add new-reel.tsx frontend with 4-step workflow - Add 'reel' type to postTypeEnum - Update navigation with Nouveau Reel link
2026-01-22 11:57:27 +01:00
Michael
7b39b34afb
fix(analytics): auto-heal token status on successful sync
2026-01-21 16:19:58 +01:00
Michael
c37a56b366
fix: reset token status on update and suppress metric errors
2026-01-21 16:14:08 +01:00
Michael
566782fa82
chore(debug): add verbose logging for analytics token validation
2026-01-21 16:09:21 +01:00
Michael
ad22aea55e
fix(analytics): handle expired tokens gracefully to prevent 500 errors
2026-01-21 16:03:30 +01:00
Michael
1bdbbfaa88
fix(server): Unify encryption logic in TokenManager to match storage service
2026-01-20 14:40:01 +01:00
Michael
54033ed6ed
fix(server): Auto-expire invalid Facebook tokens on sync failure
2026-01-20 14:37:08 +01:00
Michael
8c911f0fb1
fix(analytics): Improve error handling and partial extraction
2026-01-20 14:35:45 +01:00
Michael
e7e9a2fb1b
fix(build): Resolve circular dependencies and type errors
2026-01-20 13:56:45 +01:00
Michael
f8ddb44e38
feat(analytics): Implement Analytics Dashboard and Token Management
2026-01-20 13:49:24 +01:00
Michael
b38f082d6e
fix: télécharger l'image avant traitement Sharp pour les stories avec texte
2026-01-20 11:34:59 +01:00
Michael
4b779838b3
Fix: Pre-process Facebook story images with sharp to correct EXIF orientation
2026-01-14 09:34:42 +01:00
Michael
509e36a05e
fix: auto-rotate images based on EXIF orientation for Facebook stories
2026-01-12 13:50:28 +01:00
Michael
ba618bfe79
feat: Introduce EmojiRenderer service for canvas, enabling text rendering with Twemoji emojis, caching, and wrapping.
2025-12-30 13:03:11 +01:00
michaelschal
6898a0fca9
Improve text rendering by handling long words and centering text
...
Update emoji rendering to correctly handle long words and center text, and adjust the client-side preview to remove hashtags instead of emojis.
Replit-Commit-Author: Agent
Replit-Commit-Session-Id: ae4037a0-2a6f-4530-9bac-79b543286bda
Replit-Commit-Checkpoint-Type: intermediate_checkpoint
Replit-Commit-Event-Id: 1a295c79-6a41-4cf1-94cd-94aa3c4f96e6
Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/397bca8c-984f-43ff-841a-10897aeb8140/ae4037a0-2a6f-4530-9bac-79b543286bda/JcM96XE
2025-11-21 06:10:39 +00:00
michaelschal
3936220a94
Add support for rendering emojis in stories and remove hashtags
...
Install twemoji-parser and node-fetch, create a new EmojiRenderer service for handling emoji rendering on canvas using Twemoji, and update the text processing logic to remove hashtags instead of emojis in shared/emoji.ts.
Replit-Commit-Author: Agent
Replit-Commit-Session-Id: ae4037a0-2a6f-4530-9bac-79b543286bda
Replit-Commit-Checkpoint-Type: intermediate_checkpoint
Replit-Commit-Event-Id: ff08c9a2-11f7-4c75-8c8f-f60e79069dce
Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/397bca8c-984f-43ff-841a-10897aeb8140/ae4037a0-2a6f-4530-9bac-79b543286bda/C5fWcTz
2025-11-21 06:04:46 +00:00
michaelschal
1bdb7445c3
Improve emoji handling and text display in previews and generated images
...
Refactor emoji removal logic into a shared utility and update dependencies.
Replit-Commit-Author: Agent
Replit-Commit-Session-Id: ae4037a0-2a6f-4530-9bac-79b543286bda
Replit-Commit-Checkpoint-Type: intermediate_checkpoint
Replit-Commit-Event-Id: 59d8c635-691c-42a3-b368-902e8f16eeee
Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/397bca8c-984f-43ff-841a-10897aeb8140/ae4037a0-2a6f-4530-9bac-79b543286bda/Q6FJ7Lw
2025-11-18 13:45:07 +00:00
michaelschal
5053cca73e
Improve text rendering on images by removing emojis and handling long words
...
Add emoji removal from text before rendering on images. Implement logic to break long words that exceed the maximum text width.
Replit-Commit-Author: Agent
Replit-Commit-Session-Id: ae4037a0-2a6f-4530-9bac-79b543286bda
Replit-Commit-Checkpoint-Type: intermediate_checkpoint
Replit-Commit-Event-Id: d948b4ab-8a36-4043-aed1-fc4629c72817
Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/397bca8c-984f-43ff-841a-10897aeb8140/ae4037a0-2a6f-4530-9bac-79b543286bda/N0tTJcl
2025-11-18 13:37:44 +00:00
michaelschal
20c0866fe8
Add Facebook video compatibility for automatic post scheduling
...
Transform video URLs to ensure they are compatible with Facebook's requirements (H.264, AAC, MP4) by applying Cloudinary transformations.
Replit-Commit-Author: Agent
Replit-Commit-Session-Id: ae4037a0-2a6f-4530-9bac-79b543286bda
Replit-Commit-Checkpoint-Type: intermediate_checkpoint
Replit-Commit-Event-Id: 33011479-5eb2-4750-8cfe-77cac0f51d8e
Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/397bca8c-984f-43ff-841a-10897aeb8140/ae4037a0-2a6f-4530-9bac-79b543286bda/L05E01m
2025-11-18 12:56:21 +00:00
michaelschal
225e4f2292
Add ability to upload and apply custom logos to social media posts
...
Implement functionality for uploading, applying, and deleting custom logos as overlays on images, along with backend processing and UI updates.
Replit-Commit-Author: Agent
Replit-Commit-Session-Id: ae4037a0-2a6f-4530-9bac-79b543286bda
Replit-Commit-Checkpoint-Type: intermediate_checkpoint
Replit-Commit-Event-Id: 91999614-5187-4902-b7a1-bf9e372de9c8
Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/397bca8c-984f-43ff-841a-10897aeb8140/ae4037a0-2a6f-4530-9bac-79b543286bda/JgqpaNl
2025-11-18 08:47:42 +00:00
michaelschal
0b70e00834
Add font support to correctly display text in generated images for social media
...
Integrate DejaVu Sans font by updating Dockerfile, registering the font in imageProcessor.ts, and referencing it in canvas font styles to resolve text rendering issues on Facebook stories.
Replit-Commit-Author: Agent
Replit-Commit-Session-Id: ae4037a0-2a6f-4530-9bac-79b543286bda
Replit-Commit-Checkpoint-Type: intermediate_checkpoint
Replit-Commit-Event-Id: ded0e79e-eb39-4fe2-9aad-3cb0b8722e22
Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/397bca8c-984f-43ff-841a-10897aeb8140/ae4037a0-2a6f-4530-9bac-79b543286bda/EMt8Koz
2025-11-18 07:15:11 +00:00
michaelschal
98a507b030
Adjust minimum font size for adaptive text across the application
...
Update the minimum font size from 24px to 12px in both client-side preview modal and server-side image processing to improve text adaptability.
Replit-Commit-Author: Agent
Replit-Commit-Session-Id: ae4037a0-2a6f-4530-9bac-79b543286bda
Replit-Commit-Checkpoint-Type: full_checkpoint
Replit-Commit-Event-Id: 26883c03-a1a8-4dda-9695-f2319b42174c
Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/397bca8c-984f-43ff-841a-10897aeb8140/ae4037a0-2a6f-4530-9bac-79b543286bda/5aomXd9
2025-11-17 15:09:53 +00:00
michaelschal
b581050eae
Add ability to overlay text on images for social media stories
...
Integrate image processing to add text to story images with dynamic font sizing and text wrapping, and upload generated images to Cloudinary via a new service.
Replit-Commit-Author: Agent
Replit-Commit-Session-Id: ae4037a0-2a6f-4530-9bac-79b543286bda
Replit-Commit-Checkpoint-Type: intermediate_checkpoint
Replit-Commit-Event-Id: 4277243d-e609-4ee4-8cbc-3521773fc333
Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/397bca8c-984f-43ff-841a-10897aeb8140/ae4037a0-2a6f-4530-9bac-79b543286bda/f2EnhiB
2025-11-17 14:39:41 +00:00
michaelschal
718d1535d6
Fix video story posting to Facebook with proper 3-phase upload
...
Implement the required 3-phase upload process (START, UPLOAD, FINISH) for publishing video stories to Facebook via the Graph API, addressing the "#100 The parameter upload_phase is required" error.
Replit-Commit-Author: Agent
Replit-Commit-Session-Id: ae4037a0-2a6f-4530-9bac-79b543286bda
Replit-Commit-Checkpoint-Type: intermediate_checkpoint
Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/397bca8c-984f-43ff-841a-10897aeb8140/ae4037a0-2a6f-4530-9bac-79b543286bda/VJoXNjs
2025-10-28 12:23:37 +00:00
michaelschal
1c0e24ece7
Fix error display for previously failed but now successful posts
...
Update schedulerService.publishPost to clear the error field when a post is successfully republished.
Replit-Commit-Author: Agent
Replit-Commit-Session-Id: ae4037a0-2a6f-4530-9bac-79b543286bda
Replit-Commit-Checkpoint-Type: full_checkpoint
Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/397bca8c-984f-43ff-841a-10897aeb8140/ae4037a0-2a6f-4530-9bac-79b543286bda/VDgoPyA
2025-10-14 19:10:26 +00:00
michaelschal
f2672727b8
Allow all users to generate AI text for posts
...
Change API endpoint `/api/ai/generate` from `requireAdmin` to `requireAuth` middleware and update OpenRouterService to use shared admin configuration instead of per-user config.
Replit-Commit-Author: Agent
Replit-Commit-Session-Id: ae4037a0-2a6f-4530-9bac-79b543286bda
Replit-Commit-Checkpoint-Type: intermediate_checkpoint
Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/397bca8c-984f-43ff-841a-10897aeb8140/ae4037a0-2a6f-4530-9bac-79b543286bda/tWDOGLP
2025-10-14 13:58:28 +00:00
michaelschal
3175ffee31
Allow users to upload photos using shared Cloudinary configuration
...
Update routes to use a shared Cloudinary configuration for media uploads and adjust CloudinaryService to fetch any available config instead of user-specific config.
Replit-Commit-Author: Agent
Replit-Commit-Session-Id: ae4037a0-2a6f-4530-9bac-79b543286bda
Replit-Commit-Checkpoint-Type: intermediate_checkpoint
Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/397bca8c-984f-43ff-841a-10897aeb8140/ae4037a0-2a6f-4530-9bac-79b543286bda/vZocxw2
2025-10-14 10:26:14 +00:00