<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>Pedro Santos</title><description>My personal blog.</description><link>https://astro-paper.pages.dev/</link><item><title>Predileto &apos;#13 - Scoped Concurrency in Async Python Workers</title><link>https://astro-paper.pages.dev/posts/predileto/scoped-concurrency-in-async-python-workers/</link><guid isPermaLink="true">https://astro-paper.pages.dev/posts/predileto/scoped-concurrency-in-async-python-workers/</guid><description>How we built a gather_with_concurrency utility to parallelize Google Places API calls inside an SQS worker — and why scoped semaphores are safe in single-loop async architectures.</description><pubDate>Tue, 31 Mar 2026 11:00:00 GMT</pubDate></item><item><title>Predileto &apos;#12 - Domain Events and Command Queues in Async Python</title><link>https://astro-paper.pages.dev/posts/predileto/domain-events-and-commands-in-async-python/</link><guid isPermaLink="true">https://astro-paper.pages.dev/posts/predileto/domain-events-and-commands-in-async-python/</guid><description>How we designed a unified domain events bus alongside dedicated command queues in our Python backend — the architecture, the code, every design decision, and the trade-offs of event-driven async systems.</description><pubDate>Tue, 31 Mar 2026 10:30:00 GMT</pubDate></item><item><title>Predileto &apos;#11 - Implementing the Unit of Work Pattern in Async Python</title><link>https://astro-paper.pages.dev/posts/predileto/implementing-unit-of-work-in-async-python/</link><guid isPermaLink="true">https://astro-paper.pages.dev/posts/predileto/implementing-unit-of-work-in-async-python/</guid><description>How we implemented the Unit of Work pattern with async SQLAlchemy to fix transaction inconsistencies across three bounded contexts — from the problem discovery to the final implementation with code walkthroughs.</description><pubDate>Tue, 31 Mar 2026 10:00:00 GMT</pubDate></item><item><title>Predileto &apos;#10 - Async Concurrency Patterns for IO-Bound Python Services</title><link>https://astro-paper.pages.dev/posts/predileto/async-concurrency-patterns-for-io-bound-python/</link><guid isPermaLink="true">https://astro-paper.pages.dev/posts/predileto/async-concurrency-patterns-for-io-bound-python/</guid><description>How we went from sequential awaits to controlled concurrency in our Python AI pipelines — covering asyncio internals, semaphore-based throttling, Celery thread pools, LangChain thread safety, and the tradeoffs that matter when your bottleneck is API latency.</description><pubDate>Sat, 28 Mar 2026 14:00:00 GMT</pubDate></item><item><title>Predileto &apos;#9 - DDD and Hexagonal Architecture in a Python Backend</title><link>https://astro-paper.pages.dev/posts/predileto/ddd-and-hexagonal-architecture-in-python/</link><guid isPermaLink="true">https://astro-paper.pages.dev/posts/predileto/ddd-and-hexagonal-architecture-in-python/</guid><description>A walkthrough of how Estate OS Service implements Domain-Driven Design with hexagonal architecture in Python — bounded contexts, ports and adapters, typed domain events, and the trade-offs that shaped the design.</description><pubDate>Sat, 28 Mar 2026 10:00:00 GMT</pubDate></item><item><title>Predileto &apos;#8 - Building the Property Search Portal with Next.js</title><link>https://astro-paper.pages.dev/posts/predileto/building-the-property-search-portal/</link><guid isPermaLink="true">https://astro-paper.pages.dev/posts/predileto/building-the-property-search-portal/</guid><description>How we built a property search portal with Next.js 16, hybrid rendering, URL-driven state, hierarchical location filtering, and comprehensive test coverage using Cypress and Jest.</description><pubDate>Thu, 26 Mar 2026 10:00:00 GMT</pubDate></item><item><title>Predileto &apos;#7 - Building a Property Visit Booking Service in Go</title><link>https://astro-paper.pages.dev/posts/predileto/building-a-booking-service-in-go/</link><guid isPermaLink="true">https://astro-paper.pages.dev/posts/predileto/building-a-booking-service-in-go/</guid><description>How we built a property visit booking service in Go with domain-driven design, optimistic locking, OpenAPI code generation, SQS event consumption, and E2E tests using testcontainers.</description><pubDate>Wed, 25 Mar 2026 20:00:00 GMT</pubDate></item><item><title>Predileto &apos;#6 - Why We Chose Service-Based Architecture</title><link>https://astro-paper.pages.dev/posts/predileto/why-we-chose-service-based-architecture/</link><guid isPermaLink="true">https://astro-paper.pages.dev/posts/predileto/why-we-chose-service-based-architecture/</guid><description>Why Predileto uses service-based architecture instead of microservices or a monolith — and how iterative domain discovery through customer interviews naturally shaped the system topology.</description><pubDate>Wed, 25 Mar 2026 19:00:00 GMT</pubDate></item><item><title>Predileto &apos;#5 - Screening Rental Applicants with LangGraph and Reducto</title><link>https://astro-paper.pages.dev/posts/predileto/how-to-screen-rental-applicants-with-ai/</link><guid isPermaLink="true">https://astro-paper.pages.dev/posts/predileto/how-to-screen-rental-applicants-with-ai/</guid><description>How we built an applicant screening pipeline that extracts identity and income data from uploaded documents, verifies them against applicant claims, and produces a risk-scored report using LangGraph and GPT-5.4.</description><pubDate>Wed, 25 Mar 2026 18:00:00 GMT</pubDate></item><item><title>Predileto &apos;#4 - Testing Async Python Services with LocalStack and SQLite</title><link>https://astro-paper.pages.dev/posts/predileto/testing-async-python-services-with-localstack/</link><guid isPermaLink="true">https://astro-paper.pages.dev/posts/predileto/testing-async-python-services-with-localstack/</guid><description>How we test a FastAPI applicant screening service end-to-end using in-memory SQLite, AsyncMock for S3/SQS, and dependency injection overrides — without spinning up Docker containers.</description><pubDate>Wed, 25 Mar 2026 14:00:00 GMT</pubDate></item><item><title>Predileto &apos;#3 - Building an AI Contract Generation Pipeline</title><link>https://astro-paper.pages.dev/posts/predileto/how-to-generate-contracts-with-rag/</link><guid isPermaLink="true">https://astro-paper.pages.dev/posts/predileto/how-to-generate-contracts-with-rag/</guid><description>How we built a contract intelligence service that parses, analyzes, and templatizes Portuguese real-estate contracts using Reducto, LangChain, and hexagonal architecture.</description><pubDate>Wed, 25 Mar 2026 10:00:00 GMT</pubDate></item><item><title>Predileto &apos;#2 - Automated Property Ingestion with Document AI</title><link>https://astro-paper.pages.dev/posts/predileto/how-to-extract-property-data-from-documents/</link><guid isPermaLink="true">https://astro-paper.pages.dev/posts/predileto/how-to-extract-property-data-from-documents/</guid><description>How we built a property ingestion pipeline that extracts property and owner data from uploaded documents using Reducto OCR, GPT-5.4 structured output, and document-type-aware prompts.</description><pubDate>Tue, 24 Mar 2026 04:59:04 GMT</pubDate></item><item><title>Predileto &apos;#1 - First Commit</title><link>https://astro-paper.pages.dev/posts/predileto/first-commit/</link><guid isPermaLink="true">https://astro-paper.pages.dev/posts/predileto/first-commit/</guid><description>How a frustrating apartment search in Portugal turned into Predileto — an AI-powered platform for real estate agencies.</description><pubDate>Wed, 25 Mar 2026 10:00:00 GMT</pubDate></item><item><title>AstroPaper 5.0</title><link>https://astro-paper.pages.dev/posts/astro-paper-v5/</link><guid isPermaLink="true">https://astro-paper.pages.dev/posts/astro-paper-v5/</guid><description>AstroPaper v5: keep the clean look, updates under the hood.</description><pubDate>Sat, 08 Mar 2025 08:18:19 GMT</pubDate></item><item><title>AstroPaper 4.0</title><link>https://astro-paper.pages.dev/posts/astro-paper-v4/</link><guid isPermaLink="true">https://astro-paper.pages.dev/posts/astro-paper-v4/</guid><description>AstroPaper v4: ensuring a smoother and more feature-rich blogging experience.</description><pubDate>Thu, 04 Jan 2024 09:30:41 GMT</pubDate></item><item><title>AstroPaper 3.0</title><link>https://astro-paper.pages.dev/posts/astro-paper-v3/</link><guid isPermaLink="true">https://astro-paper.pages.dev/posts/astro-paper-v3/</guid><description>AstroPaper Version 3: Elevating Your Web Experience with Astro v3 and Seamless View Transitions</description><pubDate>Mon, 25 Sep 2023 10:25:54 GMT</pubDate></item><item><title>AstroPaper 2.0</title><link>https://astro-paper.pages.dev/posts/astro-paper-2/</link><guid isPermaLink="true">https://astro-paper.pages.dev/posts/astro-paper-2/</guid><description>AstroPaper with the enhancements of Astro v2. Type-safe markdown contents, bug fixes and better dev experience etc.</description><pubDate>Mon, 30 Jan 2023 15:57:52 GMT</pubDate></item></channel></rss>