Inspiration

We are Bitsol, a Colombian startup focused on tools for preserving memory and files. When we started looking for clients we used ChatGPT to research opportunities. It worked, but moving all of that information into Excel files was slow and manual, and the reasoning behind each row evaporated the moment it became a cell. When we saw the opportunity to take part in this hackathon we decided to turn our own need into a product.

What it does

A user defines the workspace — who they are, what they do, what they offer — and creates campaigns carrying goals, search rules, priority segments, qualifying criteria, exclusions, and geography.

Discover uses that context to return candidate organizations for review. Nothing is written until the user ticks it. Saved prospects enter a database where they move through lifecycle stages, accumulate contacts and follow-ups, and keep a timeline of emails, calls, meetings, and stage changes.

Research produces evidence separated into verified facts, hypotheses, unknowns, limitations, and offering fit, with every fact carrying a source that was actually retrieved.

A per-prospect agent reads the record and answers questions about it. Paste the reply a prospect just sent and it proposes a timeline entry, the contact the message reveals, and the next action it implies. It applies none of them on its own.

How we built it

We used Codex with GPT-5.6 to build Acquiloom: the architecture, the interface, the database, the business flows, the tests, and the security rules. Inside Acquiloom, GPT-5.6 powers research, discovery, and the agent through the OpenAI Responses API with strict structured output and web search.

It is a Tauri 2 desktop application. Rust owns configuration, authentication, MariaDB and its migrations, files, and every OpenAI request. React is a presentation layer that calls typed Tauri commands and never receives a credential.

What makes it different

Three invariants, each enforced in Rust rather than requested in a prompt.

Traceability. A verified fact must cite a source that was retrieved, a source URL must parse as http or https, and an offering fit must name a real offering slug from the workspace. A response that breaks these rules is discarded rather than repaired.

Context. The workspace profile and the campaign goal travel with every request, so the answer is about this business rather than business in general.

Human control. Discovery never writes an organization. The agent's proposals are stored and re-read from the database when applied, so the interface can choose among the model's own proposals but cannot invent one. The action vocabulary contains no deletion, because pasted email text is untrusted and may carry instructions of its own. Acquiloom records manual sending and never sends email.

Challenges

Cross-platform packaging was harder than the product logic. A universal macOS build only lipos the main binary, so a crate that ships a second binary fails to bundle. A Windows CI checkout with core.autocrlf rewrites migration files, and because sqlx embeds and checksums them byte for byte, the Windows installer refused to migrate a database that was already healthy — a failure invisible in local builds.

Packaged builds also had no way to be configured, since an installed application has no repository .env beneath it. Every value a user entered was tested and then thrown away. The configuration editor now writes to a per-user file and names the exact path.

Accomplishments

An evaluator can download one installer, launch it, set a database connection and an API key from the interface with both proved before they are stored, and reach a working workspace without a terminal.

What we learned

Structured output is not a safety mechanism. It constrains shape, not truth. Everything that mattered — citations resolving, URLs parsing, slugs existing, contacts belonging to the organization they are being attached to — had to be re-checked in Rust after the model answered.

Media

Language Video
English youtu.be/NvIcrVswm1w
Español youtu.be/vvkQWSFi-T4

The Spanish recording is the original. The English narration was produced with ElevenLabs.

Built With

  • mariadb
  • openai
  • rust
  • tauri
Share this project:

Updates