# Duarte O.Carmo > The personal website of Duarte O.Carmo. A technologist/consultant from Lisbon, now based in Copenhagen. --- Source: https://duarteocarmo.com/about # About me ![Duarte's picture](https://duarteocarmo.com/images/about/profile.webp) ![Duarte's snarky picture](https://duarteocarmo.com/images/about/profile_snarky.webp) Hi there. I'm Duarte (`du-art`). I'm a technologist, born and raised in sunny Lisbon, now based in Copenhagen. My work lies in the intersection of Machine Learning & AI, Data, Software, and People. I'm in love with Technology, and how it can improve people's lives. In the past, I've worked in Consumer Electronics, Public Institutions, Big Three Management Consulting, and YC-backed startups. The common thread? Solving *hard* problems end-to-end. My work is greatly shaped by my background and education. I've studied at the [Superior Technical Institute of Lisbon](https://tecnico.ulisboa.pt/en/), the [Beijing Institute of Technology](http://english.bit.edu.cn/), and the [Technical University of Denmark.](https://www.dtu.dk/english) When I'm not solving hard problems, you can find me geeking out about new gadgets, [writing code](https://duarteocarmo.com/images/about/code.jpg), [reading](/books), [taking photos](https://duarteocarmo.com/images/about/photos.jpg), or [running](https://duarteocarmo.com/images/about/run.jpg). If you want to learn more about my work, you can browse my [resume](/cv.pdf), my [talks](/talks), or my [consulting](/consulting) page. I like emails from strangers: [me@duarteocarmo.com](mailto:me@duarteocarmo.com?subject=Hi) --- Source: https://duarteocarmo.com/consulting # Consulting I help clients solve hard problems using ML/AI, Data, and Software. I take a full-stack approach that starts with *people*. I don't believe in building in the basement, but in tackling problems together. Browse my [resume](/cv.pdf) or [talks](/talks) to learn more. Ready to chat? [Email me](mailto:me@duarteocarmo.com) or [schedule a call](https://cal.com/duarteocarmo/meeting?duration=30). Selected work ------------- * Replaced ElevenLabs text-to-speech model with a custom model, reducing monthly costs by 70% while matching quality and availability * Scaled a healthcare insights platform powered by LLMs from 100 to 20K global users and grew the team from 2 to 15 * Built NLP models categorizing 50M+ professionals for lead prospecting, while leading the ML/AI team and mentoring engineers * Cut pharmaceutical risk review times by 50% by designing and deploying an LLM-based adverse event and compliance detection system * Developed an API for a multi-modal enterprise search engine integrating 12 NLP/Audio/Video models for unified resource discovery * Automated farm stratification and carbon stock segmentation with state-of-the-art satellite imagery models for a climate tech startup Clients ------- ![companies](https://duarteocarmo.com/images/pages/companies.webp) Testimonials ------------ > "Our platform would not exist without him — one of the best engineers I've ever had the privilege to work with." > — Y.M, Pharma Client, 2025 --- Source: https://duarteocarmo.com/developers # API documentation The API provides public information from this website. It is read only. Most endpoints return JSON; About and Consulting return Markdown. Every page and blog post also has a Markdown version advertised through an HTML `rel="alternate"` link. * Base URL: `https://duarteocarmo.com` * LLM-readable index: [`/llms.txt`](/llms.txt) * Full key pages: [`/llms-full.txt`](/llms-full.txt) * OpenAPI specification: [`/openapi.json`](/openapi.json) * MCP endpoint: `https://duarteocarmo.com/mcp` Quickstart ---------- Fetch the latest posts with curl: ``` curl "https://duarteocarmo.com/api/posts?limit=5" ``` Search for posts about MCP: ``` curl "https://duarteocarmo.com/api/posts?q=mcp&limit=5" ``` Fetch the About page as Markdown: ``` curl "https://duarteocarmo.com/about.html.md" ``` `llms.txt` is a concise index of pages and posts. `llms-full.txt` contains the complete About, Consulting, and API documentation pages. Blog post bodies are available through their individual Markdown URLs but are not included in `llms-full.txt`. For any page or post, inspect its HTML for the exact Markdown URL: ``` ``` A successful list response contains `data` and `pagination`. Pass the returned `nextCursor` as the `cursor` parameter to fetch the next page. Endpoints --------- | Method | Path | Description | | --- | --- | --- | | GET | `/api` | API version and access details | | GET | `/api/about` | About page as Markdown | | GET | `/api/consulting` | Consulting page as Markdown | | GET | `/api/contact` | Public contact details | | GET | `/api/posts` | Posts with search and cursor pagination | The [OpenAPI specification](/openapi.json) defines every parameter and response schema. About and Consulting return a Markdown string with `Content-Type: text/markdown`. Contact returns JSON contact details. Contact is read-only and does not submit messages or create bookings. Authentication and API keys --------------------------- No API key or account is required. All endpoints expose information that is already public on the website, and no endpoint can change data. The API has no application rate limit. Cloudflare may still limit abusive traffic. Clients should cache responses and retry temporary errors with backoff. Errors ------ API errors use one JSON shape: ``` { "error": { "code": "INVALID_LIMIT", "message": "limit must be an integer between 1 and 100", "hint": "Remove limit to use the default value of 20." } } ```