AI Minds Hackathon, 24h Sprint
Moufida, Local-First AI Ecosystem

- Role
- Co-Architect, Distributed Systems & AI
- Timeline
- February 2026
- Duration
- 24h hackathon sprint
- Team
- Team: HTW
Overview
Moufida (Tunisian Arabic for "helpful") is a desktop copilot that runs on your own machine, built in a 24-hour sprint. It searches across all your files by meaning, organizes them for you, answers by voice, and flags gaps in what you've collected, all without sending your data to the cloud.
The problem
Most AI assistants only work online and ship your data to someone else's servers. For anything sensitive, medical, legal, research, that's a dealbreaker. The challenge was to build a genuinely useful assistant that handles text, images, and audio and runs entirely on local hardware, in 24 hours.
What I built
- 01
Five services, no central gateway
A transparent desktop overlay talks directly to five small Python services, one each for retrieval, search, organization, the voice copilot, and gap detection.
- 02
Understands everything you throw at it
The retrieval engine detects whether a file is text, a PDF, an image, or audio, and turns them all into embeddings in one shared space, so a photo and a paragraph can be compared side by side.
- 03
Search that shows its work
The search service, built on a custom fork of the Qdrant vector database, can explain why two things came back as similar rather than just handing over a score.
- 04
Organizes files by meaning
It clusters your files by what they're about, proposes a folder layout, and lets you preview the moves before anything actually changes on disk.
- 05
Talks and listens, locally
The copilot does speech-to-text and text-to-speech on-device and chats through a local language model, so the whole voice loop works offline.
- 06
Notices what's missing
A background service scans your collection for sparse topics, unanswered questions, and abandoned threads, and surfaces them.
Architecture
The desktop overlay calls five local services directly. Retrieval is the backbone: it ingests files, builds embeddings, and stores vectors in XQdrant with metadata in MongoDB. Search queries that index, organization clusters it, and the copilot runs the voice loop. A local Qwen3 model, shared over ngrok, serves all of them without data leaving the machine.
Tech stack
Tauri + Next.js
Transparent desktop overlay with 6 panels: Agents, Copilot, Files, Graph, Insights, Settings
CLIP + BLIP + Whisper
Multimodal embedding pipeline, text/image/audio/video all embedded in shared CLIP space, locally
XQdrant (Custom Fork)
Modified Qdrant with `score_explanation` field for explainable vector similarity decomposition
DBSCAN Clustering
Scikit-learn DBSCAN (eps=0.35) over vector embeddings for natural-language file organisation plans
faster-whisper + Piper TTS
Local STT via CTranslate2 Whisper and local TTS via Piper, fully offline voice pipeline
Qwen3 4B via ngrok
Local Ollama model exposed OpenAI-compatibly over ngrok for search reasoning, organisation, and chat
MongoDB
Stores multimodal metadata, similarity graph, timeline events, chat history, and knowledge gaps
APScheduler
Knowledge Gap service runs 5 gap detection strategies every 720 minutes via APScheduler
Results
24h Build
Full working prototype delivered in a single hackathon sprint
5 Services
Retrieval, Search, Organisation, Copilot, Knowledge Gap, all independent
100% Local
All embeddings, STT, and TTS run on-device, zero cloud data transfer
5 Modalities
Text, PDF, DOCX, image, audio, video, and HTML ingested in shared CLIP space
Explainable Search
XQdrant `score_explanation` gives per-dimension vector similarity breakdown
5 Gap Types
Topic sparsity, incomplete plans, unresolved questions, abandoned topics, unjustified decisions
What I took away
- 01
Building 5 independent services in 24 hours works only if each service has a clearly bounded responsibility from the start, we defined the port map and API contracts in the first 30 minutes, then each engineer worked in parallel.
- 02
XQdrant's score_explanation field is a major UX differentiator: showing users *why* a document was retrieved (which dimensions contributed to the score) builds trust that 'smart' keyword search never could.
- 03
Qwen3 4B punches well above its weight class, it consistently tops benchmarks against models 2–3× its size on reasoning, instruction-following, and multilingual tasks. Running it locally via Ollama gave us near-instant cold-start and effectively zero marginal cost per query, which matters when 5 services are all calling it in parallel.
- 04
We initially tried to upgrade to Qwen3.5 VL for native vision-language understanding (directly describing or reasoning about ingested images without needing separate BLIP captioning). It turned out Ollama doesn't yet support the VL architecture introduced in the Qwen3.5 visual series, the multimodal projector layers aren't mapped in the GGUF backend yet, so we fell back to our BLIP-in-CLIP pipeline, which worked well enough for the 24h scope.
- 05
faster-whisper + Piper TTS is the fastest path to a fully local voice pipeline: both are CTranslate2-native, no internet required, and combined latency (STT + TTS roundtrip) was under 2 seconds on commodity hardware.
- 06
Knowledge gap detection via scheduled MongoDB analysis is underrated, flagging 'abandoned topics' and 'unresolved questions' automatically surfaces blind spots users didn't even know they had.