# Jorge Calderita > Software developer with 20+ years of experience, specializing in iOS, visionOS, and Swift (client + server). Personal portfolio and technical blog about Swift, Server-Side Swift, SwiftUI, accessibility, and software architecture. ## Author - Name: Jorge Calderita - Role: Software Developer (iOS, visionOS, Swift) - Website: https://jcalderita.com - GitHub: https://github.com/jcalderita - LinkedIn: https://www.linkedin.com/in/jcalderita - X: https://x.com/jcalderita - Email: contacto@jcalderita.com ## Blog Technical articles in Spanish and English about Swift development, Server-Side Swift, iOS patterns, accessibility, database design, and developer tooling. - [Blog (English)](https://jcalderita.com/blog/): All English articles - [Blog (Spanish)](https://jcalderita.com/es/blog/): All Spanish articles - [Atom Feed (EN)](https://jcalderita.com/blog/feed.xml): English RSS feed - [Atom Feed (ES)](https://jcalderita.com/es/blog/feed.xml): Spanish RSS feed ## Articles - [Model Parts](https://jcalderita.com/blog/model-parts/): How to centralize indexes, foreign keys, and unique constraints in the model itself so migrations and tests speak the same language. - [Model Parts](https://jcalderita.com/es/blog/model-parts/): Cómo centralizar índices, claves foráneas y restricciones únicas en el propio modelo para que las migraciones y los tests hablen el mismo idioma. - [AI Status Bar](https://jcalderita.com/blog/ai-status-bar/): How I built a custom status bar in Claude Code to always see context, tokens and usage limits at a glance without spending a single extra token. - [AI Status Bar](https://jcalderita.com/es/blog/ai-status-bar/): Cómo monté una status bar personalizada en Claude Code para tener siempre visible el contexto, tokens y límites de uso sin gastar ni un token extra. - [Back to Shell](https://jcalderita.com/blog/back-to-shell/): How AI brought me back to the shell after years of GUIs. The full development cycle that returns to text, to the command, and to the starting point. - [Back to Shell](https://jcalderita.com/es/blog/back-to-shell/): Cómo la IA me devolvió a la shell tras años de GUIs. El ciclo completo del desarrollo que vuelve al texto, al comando y al punto de partida. - [WWDC26 Group Labs](https://jcalderita.com/blog/wwdc26-group-labs/): WWDC26 Group Labs are live Q&A sessions with Apple engineers. I share what I discovered and where to find my transcribed notes by topic. - [WWDC26 Group Labs](https://jcalderita.com/es/blog/wwdc26-group-labs/): Los Group Labs de la WWDC26 son sesiones de Q&A con ingenieros de Apple. Te cuento mi descubrimiento y dónde encontrar mis notas transcritas. - [WWDC26 Videos](https://jcalderita.com/blog/wwdc26-videos/): WWDC26 publishes over a hundred sessions. I built my own grouping and checklist to watch them in my order and tick off blocks throughout the year. - [WWDC26 Videos](https://jcalderita.com/es/blog/wwdc26-videos/): WWDC26 publica más de cien sesiones. Me he armado mi propia agrupación y checklist para verlas en mi orden y tachar bloques a lo largo del año. - [Claude Voice](https://jcalderita.com/blog/claude-voice/): How a trail running accident forced me to communicate with AI using my voice and ended up teaching me a skill I didn't know I needed. - [Claude Voice](https://jcalderita.com/es/blog/claude-voice/): Cómo un accidente en carrera de monte me obligó a comunicarme con la IA usando la voz y terminé aprendiendo una habilidad que no sabía que necesitaba. - [WWDC 26](https://jcalderita.com/blog/wwdc26/): WWDC is not just another conference for me. It's the event of the year I enjoy more than any movie or TV show premiere, like a kid at Christmas. - [WWDC 26](https://jcalderita.com/es/blog/wwdc26/): WWDC no es una conferencia más para mí. Es el evento del año que disfruto más que cualquier estreno de cine o serie, como un niño en Navidad. - [Swift Pills](https://jcalderita.com/blog/swift-pills/): Five-minute Swift pills that teach you things you hadn't even considered. Knowledge that slips into your day without asking for a slot in the agenda. - [Swift Pills](https://jcalderita.com/es/blog/swift-pills/): Píldoras de cinco minutos sobre Swift que te enseñan cosas que ni siquiera habías considerado. Conocimiento que entra sin pedir hueco en la agenda. - [Apple Coding Speed](https://jcalderita.com/blog/apple-coding-speed/): "What Apple Coding Academy's training really builds: not just Swift code, but speed of comprehension, analysis, and development across the Apple ecosystem." - [Apple Coding Speed](https://jcalderita.com/es/blog/apple-coding-speed/): Qué entrenan las formaciones de Apple Coding Academy: no solo código Swift, sino velocidad de comprensión, análisis y desarrollo en el ecosistema Apple. - [Save Tokens](https://jcalderita.com/blog/save-tokens/): How to cut tokens in Claude Code by moving the bash logic of your skills into reusable scripts that the AI invokes with a single line. - [Save Tokens](https://jcalderita.com/es/blog/save-tokens/): Cómo reducir tokens en Claude Code moviendo la lógica bash de tus skills a scripts reutilizables que la IA invoca con una sola línea. - [UUID v7](https://jcalderita.com/blog/uuid-v7/): Swift uses UUID v4 by default, but with a small extension you can leverage all the advantages of UUID v7 without sacrificing performance. - [UUID v7](https://jcalderita.com/es/blog/uuid-v7/): Swift usa UUID v4 por defecto, pero con una pequeña extensión puedes aprovechar todas las ventajas de UUID v7 sin sacrificar rendimiento. - [SIGBUS](https://jcalderita.com/blog/sigbus/): How Swift Testing crashes with SIGBUS when formatting errors from enums with associated values, and how I fixed it with three custom helpers. - [SIGBUS](https://jcalderita.com/es/blog/sigbus/): Cómo Swift Testing crashea con SIGBUS al formatear errores de enums con valores asociados, y cómo lo solucioné con tres helpers propios. - [Two Bigs](https://jcalderita.com/blog/two-bigs/): Most tech content bores me because it lacks passion. My three filters to find what deserves my time and why Julio and Oliver always pass them. - [Two Bigs](https://jcalderita.com/es/blog/two-bigs/): Casi todo el contenido técnico me aburre porque le falta pasión. Mis tres filtros para encontrar lo que merece mi tiempo y por qué Julio y Oliver siempre los pasan. - [Astro to Saga](https://jcalderita.com/blog/astro-to-saga/): Why I migrated my portfolio from Astro to Saga, a static site generator written in Swift, and how I removed Node from my stack for good. - [Astro to Saga](https://jcalderita.com/es/blog/astro-to-saga/): Por qué migré mi portfolio de Astro a Saga, un generador de sitios estáticos en Swift, y cómo eliminé Node de mi stack para siempre. - [OnlyDNS](https://jcalderita.com/blog/only-dns/): How disabling Cloudflare's proxy and switching to DNS-only mode solved in 5 minutes the La Liga block that had been taking down my site for months. - [OnlyDNS](https://jcalderita.com/es/blog/only-dns/): Cómo desactivar el proxy de Cloudflare y pasar a modo Solo DNS resolvió en 5 minutos el bloqueo de La Liga que arrastraba desde hacía meses. - [My First Macro](https://jcalderita.com/blog/my-first-macro/): A macro to automatically generate the ID, timestamps, and namespace in every Fluent model. - [My First Macro](https://jcalderita.com/es/blog/my-first-macro/): Macro para generar automáticamente el ID, los timestamps y el espacio de nombres en cada modelo Fluent. - [DB Admin vs Dev](https://jcalderita.com/blog/db-admin-vs-developer/): Separating database administration from development is not an opinion: it's a responsibility. - [DB Admin vs Dev](https://jcalderita.com/es/blog/db-admin-vs-developer/): Separar la administración de base de datos del desarrollo no es una opinión: es una responsabilidad. - [Migrate Spaces](https://jcalderita.com/blog/migrate-spaces/): How to automate PostgreSQL namespace creation using FluentKit migrations in Vapor, replacing error-prone manual setup with versioned, reversible code. - [Migrate Spaces](https://jcalderita.com/es/blog/migrate-spaces/): Cómo crear espacios de nombres en PostgreSQL con migraciones de FluentKit en Vapor, reemplazando la configuración manual por código versionado y reversible. - [Tailwind to CSS](https://jcalderita.com/blog/tailwind-to-css/): Why I migrated my portfolio from Tailwind CSS to vanilla CSS and the benefits I gained in performance, bundle size, and full control over the code. - [Tailwind to CSS](https://jcalderita.com/es/blog/tailwind-to-css/): Por qué migré mi portfolio de Tailwind CSS a vanilla CSS y qué ventajas obtuve en rendimiento, peso y control total del código. - [Cupertino MCP](https://jcalderita.com/blog/cupertino-mcp/): Discover Cupertino MCP, the tool that integrates all of Apple's documentation directly into your AI for iOS/macOS development. - [Cupertino MCP](https://jcalderita.com/es/blog/cupertino-mcp/): Descubre Cupertino MCP, la herramienta que integra toda la documentación de Apple directamente en tu IA para desarrollo iOS/macOS. - [Which AI](https://jcalderita.com/blog/which-ai/): How to deal with AI tool fatigue as a developer: why chasing every new model is impossible and how to pick the right tools without burning out from FOMO. - [Which AI](https://jcalderita.com/es/blog/which-ai/): Cómo lidiar con la fatiga de herramientas de IA como desarrollador: por qué perseguir cada nuevo modelo es imposible y cómo elegir sin caer en el FOMO. - [Conferences 25](https://jcalderita.com/blog/conferences-25/): Curated list of the best iOS, Swift, and Apple developer conferences in 2025 with dates, locations, and links to watch every talk for free. - [Conferences 25](https://jcalderita.com/es/blog/conferences-25/): Lista curada de las mejores conferencias de iOS, Swift y Apple en 2025 con fechas, ubicaciones y enlaces para ver todas las charlas gratis. - [Async Concurrent Map](https://jcalderita.com/blog/async-concurrent-map/): How to combine concurrent processing with chunking to optimize resource usage in massive asynchronous operations. - [Async Concurrent Map](https://jcalderita.com/es/blog/async-concurrent-map/): Como combinar procesamiento concurrente con chunking para optimizar el uso de recursos en operaciones asíncronas masivas. - [Async Map Timeout](https://jcalderita.com/blog/async-map-timeout/): Updating asyncMap to add rate limiting control through timeouts between operations. - [Async Map Timeout](https://jcalderita.com/es/blog/async-map-timeout/): Actualización de asyncMap para añadir control de rate limiting mediante timeouts entre operaciones. - [Copy To](https://jcalderita.com/blog/copy-to/): Export large datasets from PostgreSQL to CSV in Vapor using the native COPY TO command, avoiding manual serialization and reducing memory consumption. - [Copy To](https://jcalderita.com/es/blog/copy-to/): Exporta grandes conjuntos de datos de PostgreSQL a CSV en Vapor usando el comando nativo COPY TO, evitando serialización manual y reduciendo consumo de memoria. - [Copy From](https://jcalderita.com/blog/copy-from/): How to perform bulk inserts with Vapor to speed up your database data insertions. - [Copy From](https://jcalderita.com/es/blog/copy-from/): Como hacer bulk insert con Vapor para acelerar tus inserciones de datos a base de datos. - [Swift Package](https://jcalderita.com/blog/swift-package/): Complete guide to Swift Package Manager cleanup commands: clean, reset, purge-cache, and when to use each one to resolve dependency issues. - [Swift Package](https://jcalderita.com/es/blog/swift-package/): Guía completa sobre los comandos de limpieza de Swift Package Manager: clean, reset, purge-cache y cuándo usar cada uno para resolver problemas de dependencias. - [Subprocess](https://jcalderita.com/blog/sub-process/): Migrating from Process to Subprocess, the new cross-platform package for launching processes in Swift. - [Subprocess](https://jcalderita.com/es/blog/sub-process/): Cambiando el uso de process por Subprocess, la nueva libreria Subprocess es un paquete multiplataforma para lanzar procesos en Swift. - [Json Snake Case](https://jcalderita.com/blog/json-snakecase/): Conveniences for encoding/decoding JSON in snake_case without boilerplate, valid for both iOS client and Vapor server. - [Json Snake Case](https://jcalderita.com/es/blog/json-snakecase/): Conveniencias para codificar/decodificar JSON en snake_case sin boilerplate, válidas para cliente iOS y servidor Vapor. - [Array to dictionary](https://jcalderita.com/blog/array-dictionary/): Convert an Array of Identifiable elements (with optional ID of type UUID?) into a [UUID: Element] dictionary, ignoring null IDs and maintaining O(1) access. - [Array to dictionary](https://jcalderita.com/es/blog/array-dictionary/): Convierte un Array de elementos Identifiable (ID opcional UUID?) en un diccionario [UUID: Element], ignorando IDs nulos y manteniendo acceso O(1). - [Schedule Queues](https://jcalderita.com/blog/schedule-queues/): Schedule the same ScheduledJob multiple times per hour with an expressive API: every N minutes, without repeating configuration or cron strings. - [Schedule Queues](https://jcalderita.com/es/blog/schedule-queues/): Programa un mismo ScheduledJob varias veces por hora con una API expresiva: cada N minutos, sin repetir configuración ni cron strings. - [Async Task List](https://jcalderita.com/blog/task-list/): Implementation of a robust system for managing asynchronous task lists with database state persistence using Swift and Vapor. - [Async Task List](https://jcalderita.com/es/blog/task-list/): Implementación de un sistema robusto para la gestión de listas de tareas asíncronas con persistencia de estado en base de datos utilizando Swift y Vapor. - [Multi-Step Process](https://jcalderita.com/blog/multi-step/): A Swift pattern for orchestrating complex multi-step processes with state control and fault recovery. - [Multi-Step Process](https://jcalderita.com/es/blog/multi-step/): Patrón en Swift para orquestar procesos complejos de varios pasos con control de estado y recuperación ante fallos. - [Concurrent Map](https://jcalderita.com/blog/concurrent-map/): Build a concurrentMap extension on Sequence using Swift structured concurrency to run async transformations in parallel with Sendable safety and error handling. - [Concurrent Map](https://jcalderita.com/es/blog/concurrent-map/): Crea una extensión concurrentMap sobre Sequence con concurrencia estructurada de Swift para ejecutar transformaciones async en paralelo de forma segura y eficiente. - [Async Map](https://jcalderita.com/blog/async-map/): Build a sequential asyncMap extension on Sequence in Swift to transform collections with async/await while preserving order and limiting resources. - [Async Map](https://jcalderita.com/es/blog/async-map/): Crea una extensión asyncMap secuencial sobre Sequence en Swift para transformar colecciones con async/await preservando el orden y limitando recursos. - [Guard and LogError](https://jcalderita.com/blog/guard-log/): Build a generic Swift function that combines guard-let unwrapping, error logging, and exception throwing in a single reusable line for Vapor backends. - [Guard and LogError](https://jcalderita.com/es/blog/guard-log/): Crea una función genérica en Swift que combina guard-let, logging de errores y lanzamiento de excepciones en una sola línea reutilizable para backends Vapor. - [Schemas and Namespaces](https://jcalderita.com/blog/schema-space/): Learn how to use the space property in Vapor's Fluent models to organize database tables into namespaces, and avoid a subtle optional type declaration bug. - [Esquemas y Espacios](https://jcalderita.com/es/blog/schema-space/): Aprende a usar la propiedad space en los modelos Fluent de Vapor para organizar tablas en namespaces, y evita un sutil bug en la declaración de tipo opcional. - [Partial Indexes](https://jcalderita.com/blog/partial-index/): Extend Vapor's SQLCreateIndexBuilder to support partial indexes with WHERE clauses on NULL columns, avoiding raw SQL while keeping type safety in Swift. - [Índices Parciales](https://jcalderita.com/es/blog/partial-index/): Extiende SQLCreateIndexBuilder de Vapor para crear índices parciales con cláusulas WHERE sobre columnas NULL, evitando SQL crudo y manteniendo type safety. - [My First Data Race](https://jcalderita.com/blog/my-first-data-race/): A technical article explaining how a refactoring for concurrency in Swift led to a data race condition, and how to solve it using actor patterns. - [Mi primera condición de carrera](https://jcalderita.com/es/blog/my-first-data-race/): Un artículo técnico que explica cómo una refactorización para concurrencia en Swift llevó a una condición de carrera, y cómo resolverla usando patrones de actores. - [Timestamps in Migrations](https://jcalderita.com/blog/timestamps-migrations/): How to avoid repeating createdAt, updatedAt and deletedAt in database migrations using extensions. - [Timestamps en Migraciones](https://jcalderita.com/es/blog/timestamps-migrations/): Cómo evitar repetir createdAt, updatedAt y deletedAt en las migraciones de base de datos usando extensiones. - [☁️ Cloud Server](https://jcalderita.com/blog/cloud-server/): Cloud server, something necessary when you work with backend. Discover the best free options and why you need one. - [☁️ Servidor en la nube](https://jcalderita.com/es/blog/cloud-server/): Servidor en la nube, algo necesario cuando trabajas con backend. Descubre las mejores opciones gratuitas y por qué necesitas uno. - [Claude Code](https://jcalderita.com/blog/claude-code/): Discover how Claude Code has become my favorite development assistant and the rules I apply to maximize its potential. - [Claude Code](https://jcalderita.com/es/blog/claude-code/): Descubre cómo Claude Code se ha convertido en mi asistente de desarrollo favorito y las reglas que aplico para maximizar su potencial. - [Love Vapor](https://jcalderita.com/blog/love-vapor/): Discover why Vapor became my favorite Swift server-side framework at the Full Stack Bootcamp, from gRPC to PassKeys and scheduled tasks. - [Amo Vapor](https://jcalderita.com/es/blog/love-vapor/): Descubre por qué Vapor se convirtió en mi framework favorito de Swift en servidor en el Bootcamp, desde gRPC hasta PassKeys y tareas async. - [La liga, thanks!](https://jcalderita.com/blog/la-liga-thanks/): How La Liga blocks my website during matches due to anti-piracy measures affecting legitimate sites on Cloudflare. - [¡Gracias, La Liga!](https://jcalderita.com/es/blog/la-liga-thanks/): Cómo La Liga bloquea mi web durante los partidos por medidas antipiratería que afectan a sitios legítimos en Cloudflare. - [My first article](https://jcalderita.com/blog/my-first-article/): Update for my personal website built with Astro and Tailwind, where I will share articles and experiences as a Swift developer in the Apple ecosystem. - [Mi primer artículo](https://jcalderita.com/es/blog/my-first-article/): Actualización de mi sitio web personal construido con Astro y Tailwind, donde compartiré artículos y experiencias como desarrollador Swift en el ecosistema Apple. ## Key Topics Swift, Vapor, Server-Side Swift, PostgreSQL, Concurrency, Async/Await, AI coding tools, iOS, visionOS, Accessibility, Testing, Static Site Generation, Shell scripting ## Optional - [Sitemap](https://jcalderita.com/sitemap.xml): Complete site map