Skip to content

Venture

Poplitu

A co-founded AI marketing and automation venture, following one lead from capture through drafting, approval, and an action in a connected tool.

building5 min read
Agentic AI · Workflow Automation · AI Infrastructure · Integrations · Platform Engineering
Role
Co-founder & Engineer
Period
2025 to Present
Status
building
Stack
TypeScript · Go · Python · Temporal
On this page (7)

A small marketing team might collect a lead through a form, add it to a campaign, prepare social posts, update a customer system, and ask a teammate to approve the final message. Those steps usually live in separate tools.

Poplitu is being built toward one artificial intelligence (AI) marketing and automation platform: forms and lead capture, email, social publishing, a visual workflow builder, and an AI assistant called Copilot that pauses for human approval before sensitive actions. I co-founded it and work across its architecture, backend, AI systems, integrations, and infrastructure.

Product tour

A 95-second film follows one enquiry from a form to a customer relationship management (CRM) system, then shows the rest of the platform: social, design, email, Copilot, integrations, and results. The screens in it are product previews with fictional sample data. They show how the experience is intended to work; they are not customer screenshots or a promise that every surface is generally available.

Forms A lead, at 9 pm.

Product preview, fictional sample data · 95 seconds, plays on a loop · switch the sound on for the voiceover

How to read the diagrams

  • Customer signals and product surfaces
  • AI work and external actions
  • Human decisions
  • Durable progress after approval

One enquiry through the platform

Suppose a potential customer submits a product-interest form. The team wants Poplitu to prepare a follow-up, let a person check it, and then update the tools they already use.

  1. Capture the leadA form submission creates the customer signal and starts the workflow.
  2. Prepare the draftThe AI step receives only the context and tools allowed for this organisation.
  3. Ask for approvalThe workflow pauses. A person can review, edit, approve, or reject the proposed action.
  4. Act and record the resultAfter approval, Poplitu sends the reviewed reply, updates the CRM, and records what happened.

This example shows one automation, not a route into every Poplitu product. Forms provide the trigger, AI helps with preparation, approval preserves human control, the CRM integration performs the agreed action, and workflow history explains the result.

What the product brings together

Marketing work crosses several product areas, but they do not all sit after the same approval step. In this example, the form starts an automation that prepares a reply and updates the CRM after approval. Social publishing, design, and email campaigns are separate product areas shown later in the tour.

Social

Compose, schedule, publish, and review activity across supported social networks.

Forms and leads

Build forms, embed them in a site, and carry each submission into lead workflows.

Email

Build messages, organise audiences, and coordinate campaign work.

Automations

Connect triggers, conditions, AI steps, approvals, and actions in a visual workflow.

Copilot

Help with multi-step work while keeping sensitive actions behind explicit approval.

Integrations

Connect more than 60 external services through a shared connection and action model.

See the platform

The stills now follow the product one area at a time. They use the same fictional coffee brand and the same preview status described above.

Forms. A team builds the intake, publishes it, and sees the same experience the visitor will use.

The form builder: a list of blocks on the left, the wholesale enquiry form on the canvas, and settings for the selected field on the right.
The form builder and the settings for one selected field.
A wholesale enquiry form embedded on a fictional coffee roaster's website, shown at phone size and partly filled in.
The same enquiry form on a phone.

Automations and approval. The workflow makes the proposed AI work and the human decision visible before anything changes outside Poplitu.

The automation canvas with four connected steps: form submitted, summarise the lead and draft a reply, request approval, and add them to your CRM. The approval step has separate exits for approved, declined, and timed out.
A form submission triggers an AI step, waits for approval, then updates the CRM.
A team chat channel where Poplitu asks whether to send the drafted reply and add the lead to the CRM, with Approve and Decline buttons.
The approval request arrives in the team's chat.

Social publishing. A person can prepare one idea for several networks and then see scheduled, published, and draft work together.

The social composer: one post selected for LinkedIn, Instagram, and X, with a live preview of how LinkedIn will show it on a phone.
One post drafted for three networks, with a preview for each.
A month calendar of scheduled, published, and draft posts across networks.
A month of scheduled, published, and draft posts.

Design. The editor explores several layouts from one description, then adapts the chosen direction to the sizes each channel needs.

The design editor after a description was typed: three laid-out versions of a hiring post to choose from.
A description turned into three layouts to choose from.
One design laid out in five sizes: Instagram post, story, LinkedIn, Bluesky, and an email banner.
One design, resized for each channel.

Email. The message builder keeps structure, content, and block settings in one editing surface.

The email editor: blocks on the left, the email in the middle, and settings for the selected block on the right.
The drag-and-drop email editor.

Copilot. The assistant shows the multi-step change it proposes and stops at the approval boundary before creating it.

A Copilot conversation that has stopped at an approval card. The card lists the automation Copilot wants to create, step by step, with Cancel and Approve buttons.
Copilot stops at an approval gate and shows what it wants to set up.

Integrations. The catalogue gives connected tools one place in the product. The names and connection states in this preview illustrate the interface; they are not a live availability list.

A product preview of the integrations catalogue with example provider cards and sample connection states.
An example provider catalogue with sample connection states.

Architecture behind the experience

Product

Social · forms · email

create, publish, capture, communicate

Automations · copilot

coordinate work with human approval

Shared platform

Identity and permissions

organisation-scoped access

Integration framework

connected accounts and provider actions

Durable workflow runtime

retries, waits, approvals, history

AI access layer

model routing, policy, metering

Foundation

Application data

product and workflow records

Background execution

work outside the request path

Observability

traces, metrics, errors

Product surfaces share one platform for permissions, integrations, durable work, and AI access.

The shared platform is the important boundary. Product features do not each invent permissions, connection handling, workflow state, or model access. They use the same rules, so an action started by a form and an action suggested by the copilot can be reviewed and audited in the same way.

Four engineering decisions

1. Use a specialised runtime only when the workload earns it.

A runtime is the environment that executes a part of the product. TypeScript remains the default because one language across most of the product lowers the cost of changing and operating it. A different runtime earns a place only when its ecosystem or execution model fits a workload materially better.

runtime decisions
runtime
TypeScript
workload shape
Product interfaces, business rules, integrations, and general request or data-transfer work
cost to accept
The default; shared types and one product language reduce coordination cost
runtime
Go
workload shape
Work dominated by high concurrency or predictable resource use
cost to accept
A separate toolchain and contracts across a language boundary
runtime
Python
workload shape
AI model, content search, evaluation, or document work that benefits from its ecosystem
cost to accept
Permissions and usage rules must still remain consistent with the product
runtime
Temporal
workload shape
Work that must survive waits, retries, signals, or deploys
cost to accept
Rules for repeatable replay, versioning, operational ownership, and another system to run

A concurrency-heavy workload needs predictable behaviour when many independent events arrive together. It may justify isolation when it must scale and fail independently from product requests. Python can earn a boundary when its model and retrieval ecosystem shortens experimentation and evaluation work. Temporal can earn one when waiting and recovery are part of the product behaviour rather than an implementation detail.

The rule is conservative: if TypeScript handles a workload well, the code stays there.

2. Treat waiting as durable product state.

The example workflow may wait for a schedule, retry an external provider, pause for the reviewer, and continue after a deploy. The design treats that waiting state as durable product data and requires external actions to be idempotent. An idempotency key gives repeated attempts the same identity, allowing a provider or integration boundary to recognise that an action was already accepted.

This does not make every network call exactly once. A timeout can leave the caller unsure whether the provider completed an action. The workflow records that uncertainty, retries only when the operation is safe, and otherwise asks for reconciliation, which means checking the provider's state before deciding what to do next.

what a durable run must remember
fact
Published workflow version
why it must survive
A run must continue with the meaning it started with even after the editor changes
fact
Current step and wake-up
why it must survive
A restart must not forget which work is due or which approval is pending
fact
Approval decision
why it must survive
The reviewer and decision are part of the run history, not a temporary UI state
fact
Action identity and outcome
why it must survive
Retries need a stable key and a truthful record of success, failure, or uncertainty

The execution design must keep a slow model call from holding up an approval or a short provider action. It must also claim scheduled work safely and avoid one organisation monopolising shared capacity. Those are the guarantees that matter to the product. Keeping workflow meaning separate from execution technology also allows the runtime to evolve without changing a published automation.

3. Keep AI suggestions separate from external action.

The architecture puts model access behind a shared product boundary for policy, usage accounting, and audit. Keeping those concerns together makes cost and permissions reviewable as the product adds AI features without publishing the providers or routing rules used at any point in time.

responsibilities at the AI boundary
responsibility
Provider routing
why it is shared
Product features do not each implement model selection and fallback
responsibility
Permissions and approval
why it is shared
A tool action follows the same organisation policy as a human action
responsibility
Usage accounting
why it is shared
Model cost can be attributed to the feature and organisation that caused it
responsibility
Evaluation and cache policy
why it is shared
A reused or model-written answer still passes a product-level quality decision

In the running example, the model may prepare text. It cannot silently turn that draft into an external action. The workflow carries the proposed action to the approval step, and the integration receives it only after a person has made the decision.

4. Keep provider differences at the boundary.

An integration provider is an external service that Poplitu communicates with. Across more than 60 provider integrations, those services differ in authorization, credentials, rate limits, error formats, and what they consider a successful request. The design goal is a consistent connection and action contract for product features while preserving provider-specific behaviour at the boundary.

one product contract, different provider behaviour
shared concern
Connection setup
public design goal
Present one product flow across account sign-in (OAuth) and provider-issued credentials
shared concern
Credential lifecycle
public design goal
Protect stored credentials and handle rotation without exposing them to product features
shared concern
Connection health
public design goal
Detect when a connection needs customer attention and explain the next action
shared concern
Release maturity
public design goal
Expose integrations according to their tested product readiness

For the example workflow, the connection check happens before the outside action. A missing permission should produce a visible next step for the customer; repeatedly retrying the same permanent authorization failure would only create noise.

How the decisions stay true.

Architecture rules are useful only when everyday changes preserve them. The engineering method records consequential decisions and checks important boundaries during review and with automated checks. The goal is to make an unsafe dependency visible before release.

The same approach applies at runtime:

  • State changes and the events they create are committed together where losing the event would strand later work.
  • Failed background work retains enough context for a safe investigation and replay without exposing credentials.
  • Implementations behind a shared boundary run the same behavioural tests, so changing an adapter does not quietly change the product contract.

What co-founding and building it taught me

Start with the customer promise

The form, approval, and final action make the product understandable. Architecture earns space only when it explains how that promise survives failure.

Make every runtime repay its cost

A second language or runtime adds deployment, monitoring, and another failure model. The workload must benefit enough to justify that permanent cost.

Treat approval as product state

Human review is part of the workflow record. It must survive a restart and stay connected to the exact action a person approved.

Poplitu continues to be built. The public product status is the source for what is available now; the film and screens on this page show the wider direction being designed around it.