Inspiration

Mark began with a frustration from real work experience.

One of us had worked at a bank where marketing was slow and fragmented. Campaigns were written manually. Each segment required its own version. Every country meant new legal adjustments. Marketers were forced to handle technical tasks outside their expertise.

If there were \( n \) regions and \( m \) segments, the workload scaled roughly like

$$\text{Work} \propto n \times m. $$

We saw an opportunity to change this with an AI Agent.


What it does

Oh, hi Mark!

Mark connects directly to a CRM and turns structured customer data into complete email campaigns.

It pulls customer properties, segments audiences, adapts tone and content, and generates ready-to-send emails based on simple prompts. Campaigns can be adjusted with small feedback changes and sent without switching to a separate mail service.

In short:

$$\text{CRM Data} + \text{Prompt} \rightarrow \text{Campaign}$$


How we built it

We are all engineering students from Lund, and this was our first hackathon.

We split the team in two. One half built a Python backend using FastAPI and connected it to the Gemini API. The other half used Lovable to explore functionality, design the frontend, and implement it in React and TypeScript.

Once the generation worked, we integrated SendGrid for email delivery. In parallel, we worked on HubSpot integration to fetch real CRM data and map its properties into our prompts.

After connecting HubSpot to Gemini and then to SendGrid, we revised the frontend design to better reflect the product we were actually building. The rest of the time was spent refining prompts, fixing routing issues, and testing the full flow end-to-end.


Challenges we ran into

The biggest challenge was system complexity.

Individually, the backend and frontend were manageable. But combining a Python backend, a Node-based frontend, CRM APIs, a mail service API, and an LLM quickly became difficult to reason about.

Gemini API calls were slower than expected, which forced us to rethink prompt size and structure. HubSpot integration required adapting to real-world property names and authentication flows. We also struggled with routing between local frontend and backend during development.

Another challenge was conceptual. At first, Mark was just a pipeline. Over time, we realized it needed to behave more like a platform layer between CRM data and communication.


Accomplishments that we're proud of

We built a working system that connects HubSpot, Gemini, and SendGrid into a single flow.

We created an agent that generates personalized campaigns based on real CRM data and sends them without manual copying.

Most of all, we built something end-to-end, an integrated product, during our first hackathon.


What we learned

We learned that integration is harder than implementation.

APIs rarely behave exactly as expected. Latency matters. Naming mismatches matter. Environment configuration matters.

We also learned how quickly complexity grows when multiple systems interact. Debugging distributed flows requires a different mindset than writing isolated code.

And we learned that product clarity is as important as technical correctness.


What's next for Mark – Campaigns, Built From Your Data

Next, we want to expand beyond email into true multichannel orchestration.

We want stronger segmentation logic, smarter feedback loops, and faster generation. We also see potential in turning Mark into a platform that sits continuously between CRM data and outbound communication.

The goal is to reduce manual marketing effort from something that scales like \( n \times m \) to something closer to constant effort per campaign to save corporations massive amount of hours. In the future, marketing personal can start their day by saying "Oh, hi Mark!".

Built With

Share this project:

Updates