The workflow before
Praxis Rock ran investor outreach and data management on a stack of no-code tools. The business rules that mattered, such as tag propagation, blocklists and sync logic, were buried inside those tools and documented nowhere. As the investor database grew, syncs broke, duplicates crept in with every import, and the setup could not meet the security expectations of the firms Praxis works for.
What we built
We ran workshops to inventory every piece of business logic hidden in the no-code tools: how tags propagate, how blocklists apply, and which system wins in a sync. That inventory became the specification.
We then built a custom application around Praxis Rock's fundraising workflow, with a Python backend, a React front end and PostgreSQL as the system of record. The rules that used to live in tool settings are now code with tests.
We added governance at the data layer: controlled update paths, deduplication on import and validation rules, so bad records are stopped on the way in rather than cleaned up later.
Before and after
| Measure | Before | After |
|---|---|---|
| Business rules | Hidden in no-code tool settings | Cataloged and enforced in code |
| Duplicate investor records | Cleaned by hand after each import | Blocked at import |
| Time on manual data cleanup | Baseline | 60% less |
What's next
With clean, deduplicated investor data in one database, Praxis Rock can move to L2: retrieval over its own investor history to prioritize outreach and draft briefings before calls.



