Interior design concept generation and client presentation creation
- Published
Interior designers often find themselves trapped in repetitive manual work. A client requests design concepts, and you're juggling three separate tools: generating mood boards and floor plans, then manually exporting everything, switching to another platform to build a presentation, and finally sending it back to the client. It's a workflow that wastes hours every week and introduces opportunities for mistakes along the way. For more on this, see Interior design concept generation and client presentation.
The good news is that this entire process can be automated. Two specialist AI tools—Cactus Interior AI for generating design concepts and Preswald AI for building polished client presentations—can work together seamlessly with the right orchestration. Once you set it up, a single trigger (perhaps a form submission or an email from a client) can generate finished design concepts, automatically feed them into a presentation template, and land a complete presentation file in your client's inbox. No copying, no pasting, no tab switching.
This guide walks you through building that workflow. We'll cover which orchestration tool suits your needs best, how to wire the APIs together, and how to handle common pitfalls like rate limits and authentication errors. By the end, you'll have a template you can reuse for every single client project.
The Automated Workflow
Choosing Your Orchestration Tool
For this particular workflow, we have three main options: Zapier, n8n, and Make (formerly Integromat). Here's how they compare for this use case:
Zapier is the easiest to set up if you've never done this before. It has native integrations with both Cactus Interior AI and Preswald AI, meaning you don't have to write HTTP requests from scratch. The trade-off is cost; you'll be paying per task executed, which adds up if you're running this multiple times daily.
Make sits in the middle. It requires a bit more technical knowledge but gives you finer control over data transformation. It's cheaper than Zapier for high-volume workflows.
n8n is self-hosted, meaning you run it on your own server. This requires some DevOps knowledge but gives you complete control and no per-task fees once it's running. For a beginner, this is likely overkill unless you're already comfortable with Docker and Linux.
For this guide, I'm going with n8n because it's both affordable at scale and transparent about how it works. Everything visible in n8n applies equally to Zapier and Make, just with different UIs.
Step 1:
Trigger the Workflow
Your workflow needs to start somewhere. Common triggers include:
- A form submission on your website
- A scheduled daily check for new client emails
- A webhook call from your project management tool
- A manual button press in n8n
For this example, we'll use a form submission. A client fills in their project details (room dimensions, style preferences, colour palette, budget), and that triggers everything.
In n8n, create a new workflow and add a Webhook node. This generates a unique URL you can post form data to:
https://your-n8n-instance.com/webhook/interior-design-workflow
Configure the webhook node to accept POST requests and extract these fields:
{
"clientName": "string",
"roomType": "string",
"dimensions": "string",
"stylePreference": "string",
"colourPalette": "string",
"budget": "number",
"clientEmail": "string"
}
Step 2:
Call Cactus Interior AI
Once the webhook fires, the next node calls Cactus Interior AI to generate design concepts. You'll need your API key from Cactus Interior AI's dashboard.
Add an HTTP Request node with these settings:
Method: POST
URL:
https://api.cactus-interior.ai/v1/generate-concepts
Headers:
Authorization: Bearer YOUR_CACTUS_API_KEY
Content-Type: application/json
Body:
{
"room_type": "{{ $json.roomType }}",
"dimensions": "{{ $json.dimensions }}",
"style": "{{ $json.stylePreference }}",
"colours": "{{ $json.colourPalette }}",
"budget_range": "{{ $json.budget }}",
"concept_count": 3,
"output_format": "json"
}
The {{ }} syntax tells n8n to pull values from the previous step's output. Cactus Interior AI will return something like this:
{
"concepts": [
{
"id": "concept_001",
"name": "Minimalist Modern",
"description": "Clean lines with warm neutrals",
"imageUrl": "https://cdn.cactus-interior.ai/...",
"furniture": [
{
"item": "sofa",
"description": "Beige linen 3-seater",
"estimatedCost": 1200
}
]
}
],
"totalEstimatedCost": 4500
}
Add error handling here. If the API times out or returns a 429 (rate limit), you want the workflow to retry, not fail silently. In n8n, set the HTTP node to retry up to 3 times with exponential backoff.
Step 3:
Transform Data for Preswald AI
Preswald AI expects a specific format for presentation content. We need to transform Cactus Interior AI's output into something Preswald can consume.
Add a Function node (or Code node, depending on your n8n version) to reshape the data:
const concepts = $input.all()[0].json.concepts;
const clientName = $input.all()[1].json.clientName;
const roomType = $input.all()[1].json.roomType;
const presentationData = {
title: `Interior Design Concepts for ${clientName}`,
subtitle: `${roomType} Project`,
slides: [
{
type: "title",
content: {
title: `Interior Design Concepts for ${clientName}`,
subtitle: `${roomType} Project`
}
},
{
type: "text",
content: {
heading: "Project Brief",
body: `Room Type: ${roomType}\nStyle Preference: ${$input.all()[1].json.stylePreference}\nColour Palette: ${$input.all()[1].json.colourPalette}`
}
}
]
};
// Add a slide for each concept
concepts.forEach((concept, index) => {
presentationData.slides.push({
type: "concept",
content: {
title: concept.name,
description: concept.description,
imageUrl: concept.imageUrl,
furniture: concept.furniture
}
});
});
return presentationData;
This creates a nested structure that Preswald AI understands, with one slide per design concept plus a title and brief slide.
Step 4:
Generate the Presentation with Preswald AI
Now we feed the transformed data into Preswald AI. Add another HTTP Request node:
Method: POST
URL:
https://api.preswald.ai/v1/presentations/create
Headers:
Authorization: Bearer YOUR_PRESWALD_API_KEY
Content-Type: application/json
Body:
{
"title": "{{ $json.title }}",
"subtitle": "{{ $json.subtitle }}",
"theme": "professional",
"slides": "{{ $json.slides }}",
"output_format": "pdf"
}
Preswald will return a response with a download URL:
{
"presentationId": "pres_abc123def456",
"status": "ready",
"downloadUrl": "https://storage.preswald.ai/pres_abc123def456.pdf",
"expiresIn": 604800
}
The PDF is now ready. Before we send it, store this download URL somewhere you can reference it in the next step.
Step 5:
Send the Presentation to the Client
Add an Email node (most orchestration tools have a built-in email connector, or you can use an SMTP node):
To:
{{ $json.clientEmail }}
Subject:
Your Interior Design Concepts – Ready to Review
Body:
Hi {{ $json.clientName }},
I've prepared three interior design concepts for your {{ $json.roomType }} project. Please find them attached and review at your convenience.
These concepts consider your style preferences and budget constraints. I'm happy to discuss modifications or dive deeper into any concept you'd like to explore further.
Best regards,
[Your Name]
Attachment:
{{ $nodeData.preswald.json.downloadUrl }}
This completes the automated workflow. One form submission triggers design generation, presentation creation, and delivery to the client. Total elapsed time: 30 to 60 seconds, depending on Cactus Interior AI's response times. For more on this, see Automated legal brief generation from court documents.
Rate Limiting and Error Handling
Both Cactus Interior AI and Preswald AI enforce rate limits. Cactus allows 100 requests per minute; Preswald allows 50 presentations per minute. If you're submitting multiple client projects simultaneously, you'll hit these limits.
In n8n, add a Wait node between requests. Set it to wait 1 second between calls. This sounds slow but actually keeps you under rate limits without failing:
Webhook Trigger
↓
Wait 1 second
↓
Cactus Interior AI
↓
Wait 1 second
↓
Data Transform
↓
Preswald AI
↓
Email
For truly robust error handling, add a Catch node at the end. If any step fails, it sends you an alert email with the error details:
{
"to": "your-email@example.com",
"subject": "Workflow Error: Interior Design Generation Failed",
"body": "Client: {{ $json.clientName }}\nError: {{ $nodeData.error.message }}"
}
Testing Before Going Live
Before activating this workflow, test it with dummy data. Fill out a test form with sample information and watch each step execute in n8n's debug panel. Verify that:
- The webhook correctly parses form fields
- Cactus Interior AI returns concept data in the expected format
- The data transformation produces valid Preswald input
- Preswald generates a PDF without errors
- The email arrives in your inbox with a working attachment link
Only after successful test runs should you activate the workflow.
The Manual Alternative
Not everyone wants full automation. Some designers prefer reviewing design concepts before they go into a presentation, ensuring quality control.
You can modify this workflow to pause before sending. After Preswald generates the PDF, instead of immediately emailing it, save the PDF to a shared folder (Google Drive, Dropbox, or your own server) and send yourself a notification. Review the presentation, make any manual edits in Preswald or another tool, then send it to the client when you're happy with it.
This hybrid approach trades some automation for human oversight. It's slower than full automation but faster than doing everything manually.
To implement this, replace the Email node with a Google Drive node (or equivalent file storage) that saves the PDF, followed by a Slack or email notification to yourself. You then handle the final client send manually.
Pro Tips
One: Store API Keys Securely
Never paste API keys directly into n8n nodes. Use environment variables or n8n's built-in credentials manager. This prevents accidental exposure if you share workflow exports.
In n8n, create a Credentials entry for each API key. Reference it in HTTP nodes using the selector, not hard-coded strings.
Two: Monitor Your Costs
Both Cactus Interior AI and Preswald AI charge per API call. If you're running this for 10 clients daily, you're making 10 calls daily to each API. Monitor your usage in their dashboards to avoid surprises. Some services offer monthly caps or alerts when you hit spending thresholds.
Three: Cache Generated Concepts
If a client asks for a revised presentation with the same concepts, you don't need to regenerate everything. Add a Database node (n8n supports PostgreSQL, MongoDB, etc.) that stores Cactus Interior AI's output keyed by client and project parameters. Before calling Cactus, check the cache first. If concepts already exist for those parameters, skip the API call entirely.
This dramatically reduces costs and response time for repeat requests.
Four: Add Conditional Logic
Not all clients need three concepts. Some want five; others want one detailed concept with multiple furniture options. Add a Switch or Conditional node that checks the client's preferences and adjusts the concept_count parameter sent to Cactus Interior AI accordingly.
IF budget > $5000 THEN concept_count = 5
ELSE IF budget > $2000 THEN concept_count = 3
ELSE concept_count = 1
Five: Version Your Workflows
Save backups of working workflows before making changes. n8n lets you export workflows as JSON files. Version control them in Git or store them in a shared folder. If an update breaks something, you can quickly revert to a previous version.
Cost Breakdown
| Tool | Plan Needed | Monthly Cost | Notes |
|---|---|---|---|
| Cactus Interior AI | Professional | £99 | Includes 1,000 concept generations per month. Additional generations £0.15 each. |
| Preswald AI | Creator | £49 | Includes 500 presentations per month. Additional presentations £0.10 each. |
| n8n (Self-hosted) | Free | £0 | Requires your own server; rough infrastructure cost £10–30/month depending on volume. |
| n8n Cloud | Professional | £50 | Managed hosting; includes 5,000 workflow executions per month. |
| Zapier | Pro | £29+ | Charges per task; roughly £0.02–0.05 per execution. At 10 daily clients, expect £30–50/month. |
| Make (Integromat) | Standard | £10 | Charges per operation; similar to Zapier but slightly cheaper at scale. |
| Email Service | SendGrid Free or Mailgun | £0–20 | Only needed if your orchestration tool doesn't include email. |
For most small design practices, Cactus Interior AI + Preswald AI + n8n Cloud totals around £150–180/month with this workflow running daily for 20–30 clients. If you prefer Zapier or Make for simplicity, budget an extra £30–50/month in orchestration fees but avoid server infrastructure costs.
More Recipes
Automated Podcast Production Workflow
Automated Podcast Production Workflow: From Raw Audio to Published Episode
Build an Automated YouTube Channel with AI
Build an Automated YouTube Channel with AI
Medical device regulatory documentation from technical specifications
Medtech companies spend significant resources translating technical specs into regulatory-compliant documentation.