Veeti Pentikäinen
AI Developer & Technical Founder
Self-taught AI developer with 3+ years building production applications that generate real revenue. I specialize in taking AI solutions from concept to deployment—integrating APIs, building automation systems, and making AI actually work in real business contexts. Currently based in Kuopio, Finland.
Technical Skills
AI & Machine Learning
- OpenAI API (GPT-4, GPT-3.5)
- Claude API (Sonnet, Opus)
- Prompt Engineering & RAG
- VAPI (Voice AI)
- LangChain basics
Programming
- Python (API integration, data)
- JavaScript/TypeScript
- SQL (data queries)
- Git version control
- REST API development
Cloud & Infrastructure
- AWS (EC2, S3, Lambda basics)
- Webhook systems
- API orchestration
- n8n automation platform
- Docker (basic)
Integrations
- Twilio (SMS, Voice)
- Shopify API
- WooCommerce API
- Meta/Google APIs
- Payment processors
Production AI Projects
ProfitSprint AI
Source-Based Profit Tracking System (Built for DriveTron client, evolved into commercial product)
The Problem: While managing marketing for DriveTron (e-scooter company), we couldn't track real profitability. Meta Ads showed one number, Google Analytics another, WooCommerce a third. ROAS looked good, but actual profit was unknown because cookie tracking is broken (iOS ATT, consent banners).
The Solution: Built a source-based profit tracking system that bypasses cookie problems entirely. Instead of trying to attribute individual conversions (impossible with broken tracking), it aggregates daily data from all sources and calculates true profit: Revenue - Ad Spend - COGS - Fees.
My Role: Solo developer - designed the architecture, built n8n automation workflows (100+ nodes), integrated APIs (WooCommerce, Shopify, Meta Ads), implemented real-time data sync, and deployed to production. The system improved DriveTron's POAS from 1.2x to 1.8x (+50%), generating €72k additional annual profit.
Technical Stack
- n8n automation (100+ node workflows)
- Shopify & WooCommerce APIs
- Meta Ads API (source data)
- PostgreSQL (Supabase)
- Node.js + Express (REST API)
- React + TailwindCSS frontend
- Recharts (data visualization)
- Edge Functions (secure credentials)
Technical Deep Dive: Source-Based Profit Architecture
The core challenge was bypassing broken cookie tracking entirely. Instead of trying to attribute individual conversions (impossible with iOS ATT and consent banners), I built an aggregated source-based system:
// n8n Workflow Structure (100+ nodes, 3 main paths)
PATH 1: Daily Data Collection
├── Trigger: Daily at 3:00 AM
├── Fetch WooCommerce Orders (last 30 days)
│ └── API: /wp-json/wc/v3/orders
│ └── Filter: created_at >= today - 30 days
├── Fetch Meta Ads Spend (last 30 days)
│ └── API: /insights?fields=spend,impressions,clicks
│ └── Group by date_start
├── Currency Conversion
│ └── Convert all to user's preferred_currency
└── Aggregate by Day
└── For each day:
Revenue = sum(order.total)
Ad_Spend = sum(meta.spend)
PATH 2: Profit Calculation
├── Get User Settings (COGS%, fees, shipping)
├── Calculate Daily Profit:
│ Gross_Revenue = daily_revenue
│ COGS = daily_revenue * user.cogs_percentage
│ Payment_Fees = daily_revenue * 0.02
│ Shipping = count(orders) * user.avg_shipping
│ Ad_Spend = daily_ad_spend
│
│ Net_Profit = Gross_Revenue - COGS - Payment_Fees - Shipping - Ad_Spend
│ POAS = Net_Profit / Ad_Spend
└── Store in PostgreSQL
PATH 3: 7-Day Rolling Average
├── Query last 7 days from database
├── Calculate rolling average:
│ rolling_profit = sum(last_7_days.profit) / 7
│ rolling_poas = sum(last_7_days.profit) / sum(last_7_days.ad_spend)
└── Update dashboard display
// Example: Real DriveTron day
Date: 2025-11-01
WooCommerce Revenue: €3,200
Meta Ad Spend: €500
COGS (50%): €1,600
Payment Fees (2%): €64
Shipping: €120
------------------------
Net Profit: €916
POAS: 1.83x (€916 / €500)
AI Phone Receptionist for Construction Companies
Voice AI System for Automated Customer Service in Finnish
The Problem: Small construction companies (roofing contractors) miss 40-60% of incoming calls because they're on-site. Each missed call = potential €3,000-€8,000 lost job.
The Solution: Built an AI voice assistant that answers calls 24/7, understands Finnish, books appointments, and collects quote requests - all while sounding natural.
Technical Challenge: Finnish is a complex language with 15 grammatical cases. Getting voice AI to understand colloquial Finnish construction terminology required extensive prompt engineering and testing.
Technical Stack
- VAPI (Voice AI platform)
- Twilio (phone infrastructure)
- Custom GPT-4 prompts (Finnish)
- Webhook system to CRM
- Calendar integration (Google)
- SMS notifications
- n8n workflow automation
Technical Deep Dive: Voice AI Flow
The system handles multi-turn conversations with context awareness:
# Voice AI conversation flow (conceptual)
conversation_flow = {
"greeting": {
"prompt": "Moi! Olet soittanut kattoremonttifirma X:lle. Olen AI-assistentti...",
"next": ["appointment", "quote", "question"]
},
"appointment": {
"collect": ["customer_name", "phone", "address", "preferred_date"],
"validate": check_calendar_availability(),
"action": book_appointment(),
"webhook": send_to_crm()
},
"quote": {
"collect": ["roof_type", "size", "current_condition", "urgency"],
"action": create_quote_request(),
"notify": send_sms_to_owner()
}
}
# Real webhook integration
@app.route('/vapi-webhook', methods=['POST'])
def handle_call_completed():
data = request.json
if data['call_ended']:
# Extract structured data from conversation
conversation = data['transcript']
extracted = parse_conversation_data(conversation)
# Push to CRM
create_crm_lead(extracted)
# Notify owner via SMS
send_sms(
to=OWNER_PHONE,
body=f"New lead: {extracted['name']}, needs {extracted['service']}"
)
return {"status": "processed"}The Problem: DriveTron (e-scooter company) had 40,000-60,000€ monthly in abandoned carts. Only 15% of customers returned on their own. Standard cart recovery emails had ~8% recovery rate.
The Solution: Built an AI system that analyzes each abandoned cart, generates personalized recovery emails addressing specific concerns (price, product selection, financing), and sends them at optimal timing.
Result: Recovery rate increased from 15% to 24.6% (+64%), generating 100,000€ additional annual revenue with zero manual work.
Technical Stack
- WooCommerce webhook listeners
- n8n automation workflows
- Claude API for email generation
- Customer segmentation logic
- HTML email templates
- A/B testing framework
- Analytics integration
Technical Deep Dive: Personalization Engine
The key was making each email feel hand-written. Here's the logic:
# Cart abandonment personalization logic
def generate_recovery_email(cart_data):
# Analyze cart characteristics
cart_value = cart_data['total']
products = cart_data['items']
customer_history = get_customer_data(cart_data['email'])
# Determine personalization strategy
concerns = identify_concerns(cart_data, customer_history)
# Returns: ['high_price', 'product_uncertainty', 'payment_options']
# Build context for AI
context = f"""
Cart Value: {cart_value}€
Products: {format_products(products)}
Customer Type: {'returning' if customer_history else 'new'}
Identified Concerns: {concerns}
Previous Purchases: {customer_history.get('past_orders', 'None')}
Time Since Abandonment: 4.4 hours
"""
# Generate personalized email with Claude
prompt = f"""
Write a personal cart recovery email for this customer.
{context}
Address these specific concerns:
- If high_price: Mention financing options (Klarna 3 months)
- If product_uncertainty: Validate their choice, mention specs
- If payment_options: List all available payment methods
Tone: Helpful, not pushy. Finnish casual business style.
Length: 150-200 words max.
"""
email_content = claude.messages.create(
model="claude-sonnet-4-5-20250929",
messages=[{"role": "user", "content": prompt}]
)
# Send via email service
send_html_email(
to=cart_data['email'],
subject=generate_subject(concerns),
body=format_html_email(email_content)
)Interested in Working Together?
I'm currently exploring opportunities in AI engineering where I can contribute my practical experience while learning enterprise-scale development practices from experienced teams.
