Why it exists
Turn a local business brief into editable advertising concepts and playable Tunisian-dialect voiceovers.
2026 / Project case study
Tunisian-Dialect Campaign & Voice Studio
A React and Node MVP that turns a local business brief into an editable advertising campaign, then generates playable Tunisian-dialect voiceovers through server-side Gemini TTS.
Turn a local business brief into editable advertising concepts and playable Tunisian-dialect voiceovers.
Built the React campaign workspace and server-side Gemini TTS route, with editable drafts, local persistence, and WAV downloads.
Working MVP · Local persistence
Explore the implementationTounsiAds is a full-stack MVP for building local advertising campaigns. Users can draft and edit concepts and scenes, manage brand and template settings, use browser speech input, and generate or download WAV voiceovers. The Gemini key remains on an Express server route, while drafts and workspace preferences are persisted locally for the prototype.
AI campaign product MVPBusiness, offer, audience, tone, duration, and call-to-action inputs create an editable campaign structure.
Concept, audience, tone, individual scenes, and final transcript remain editable after generation.
Starter prompts, reusable brand details, workspace settings, help, and campaign history in one product.
Browser speech-to-text can capture a brief in supported browsers, alongside typed prompts and attachments.
Selectable Gemini voices and delivery directions generate playable audio through a protected server route.
Raw model audio is converted into a standard WAV file for native playback and export.
Editable campaign content stays in the browser while protected server-side services turn approved copy into playable audio.


React manages campaign editing and local history. Vite proxies audio requests to an Express API, where the Gemini credential remains server-side. The response is converted to WAV and returned for browser playback or download.
Actual project screens and documented visuals. Open any image for the full view.







Keeping the model key out of the React bundle while preserving a simple local full-stack development flow.
Treating generated content as a draft that users can inspect and refine, rather than an opaque final result.
Supporting Arabic, Tunisian Latin/Arabizi, and mixed French wording while making pronunciation limitations visible.
Open a technology to see its role in this project.
Editable campaign workspace
Frontend tooling and production build
Optional browser speech-to-text input
Campaign history and workspace preferences
Runtime for the TTS service
Server-side POST /api/tts route
API key kept outside the browser bundle
Prompt-directed voice generation
Server-side model client
Browser-playable and downloadable output
One connected MVP flow turns a local campaign idea into editable copy and a downloadable voiceover.
Provider credentials stay on the Node server rather than being exposed through Vite environment variables.
Every generated concept, scene, and transcript remains editable before voice generation.
Explore the available resources or talk with me about the design and engineering behind this project.