Three Python systems in production. In each I owned the architecture, the code and the deployment.
B2B CRM & lead automation
Architect & sole developer · In production · 2026 to present
Lead acquisition, enrichment, campaign sequences and a sales pipeline on one platform
- A campaign engine: multi-step sequences, message variants with A/B testing (multi-armed bandit), condition-based branches, automatic actions and recipient enrollments.
- An enrichment chain where every contact passes through paid and free sources (PDL → Hunter → ZeroBounce → Gemini) until it has a verified, deliverable email address and a reasoned company context.
- Container-free production deployment: systemd + Nginx + native PostgreSQL. Development runs on Podman Compose with local overrides.
39+domain models
PythonFlask 3.1SQLAlchemy 2.0PostgreSQL 16React 19Vite 8CeleryRedis
Why it matters: Flask, SQLAlchemy and Celery in production, with integrations and scheduling built in.
Automated accounting system
Architect & developer · In daily use · 2026 to present
End-to-end bookkeeping automation for a sole trader, a limited company and a personal account.
- Automatic receipt collection through the Gmail API (OAuth2), email-to-PDF conversion, and matching each receipt to the right transaction by amount, date and counterparty.
- Idempotent publishing into Firefly III: transactions are keyed by external_id, so re-running never creates duplicates. The Finnish chart of accounts is mapped to Firefly categories, budgets are read from a Google Sheets plan, PDF receipts are attached to their transactions.
2banks integrated0duplicates (idempotent)
PythonGmail APIGoogle Sheets APINordeaHolviFirefly IIISQLiteGemini
Why it matters: Gmail, Sheets and bank APIs, idempotent: a rerun never creates duplicates.
SKT quoting software: computer vision for job costing
Architect & developer · Active client project · 2026 to present
Building assessment and window-cleaning cost estimation for the Helsinki metro area
- A 10-phase pipeline: Oikotie scraper (cards, details and photos) → Digitransit geocoding → Google Street View (URL-signed) and Mapillary → Claude Sonnet Vision → man-hour formula v2.0 with a v3.0 refinement → a proposal from a single command.
- Cost tracking for every LLM call with its own self-test, so the price of vision analysis stays visible before a run is scaled to hundreds of targets.
10pipeline phases584management offices
Python 3.11Claude Sonnet VisionGoogle Street ViewMapillaryDigitransitSQLiteStreamlitDocker
Why it matters: A multi stage data pipeline where the output and the cost of every stage are visible.