Inspiration

Small businesses often need a clear answer quickly, but traditional consulting can feel expensive, slow and vague. I wanted to build Contessa as a more practical alternative: a clear consulting offer on the front end, supported by an outreach workflow that treats people and their inboxes with respect.

What it does

Contessa presents fixed-price consulting services for businesses and individuals. Behind the site is a modular outreach engine that can process approved public business-contact data, validate contacts, create a concise personalized email, send through the configured Contessa inbox, and record every action.

The automation is intentionally limited. A prospect can receive one initial email and only one follow-up after at least 30 days if there has been no reply. Replies, bounces and opt-outs immediately stop future outreach.

How I built it

I built the website as a lightweight static site using HTML, CSS and JavaScript. The outreach engine is Python-based and separated into modules for discovery, compliance, validation, personalization, email generation, delivery, scheduling and logging.

SQLite stores prospect state, message history, reply status, bounce status, opt-outs and follow-up scheduling. GitHub Actions runs the workflow on weekday mornings in Singapore/Malaysia time. AgentMail handles the configured email inbox and OpenAI can optionally help draft concise first messages from factual public business context.

I used Codex and GPT-5.6 to develop the site, refactor the outreach system into maintainable modules, implement the database and scheduling logic, write tests, and improve the project documentation.

Challenges I ran into

The biggest challenge was balancing automation with responsible outreach. It would have been easy to build an aggressive sequence sender, but that would not be useful or respectful. I chose to enforce strict suppression, reply and bounce rules, rate limits, duplicate detection and a single-follow-up policy.

Another challenge was lead discovery. I avoided direct Google Maps web scraping and designed the system around approved public sources, robots.txt checks and official API-based discovery where available.

What I learned

I learned that a useful agent is not just one that can send messages. It needs clear boundaries, reliable state tracking, recovery behavior and an audit trail. The strongest part of the project is that it is designed to stop when someone says no.

What's next

Next, I plan to connect an official Places API discovery adapter, add a review queue for suggested messages, and let the operator approve outreach before sending in higher-risk markets.

Built With

Share this project:

Updates