Full Stack Developer ·
Málaga, Spain ·
Open to new opportunities
Self-taught Full Stack developer, backend-leaning. I care about understanding how things work, not just making them run, and shipping quality code that's easier to maintain and debug.
I run Linux daily, self-host services on Proxmox, and use Coolify for deployment testing. Currently preparing for the AWS Certified Developer – Associate (DVA-C02) to strengthen my cloud and scalability skills.
Hydrolink: Full-stack IoT irrigation platform, built solo from ESP32 firmware to React Native app
Born from a real need: managing irrigation systems in the countryside without physically checking on them.
Tech: Java/Spring Boot · React Native (Expo) · TanStack Query · PostgreSQL · Redis · AWS IoT Core · AWS Cognito · MinIO · Docker · Coolify · ESP32/PlatformIO
Architecture:
- Device status flows from the ESP32 to AWS IoT Core over MQTT, is routed by an IoT rule into SQS, and is consumed by the Spring backend
- Commands go the other way: the API publishes to the IoT Data Plane with IAM; the device subscribes to its own command topic
- The app reads live device state directly from IoT Core using temporary Cognito Identity Pool credentials, scoped per device by an IoT policy attached on link
Features:
- Device provisioning and linking: an application record created on boot and linked by an ownership secret, separate from the AWS Thing the device provisions itself via fleet provisioning (X.509)
- Authentication fully migrated to AWS Cognito via Amplify; the API verifies tokens as an OAuth2 resource server and derives the user identity server-side, never from the client
- Two-phase secret rotation, gated on a device acknowledgement, so a failed rotation leaves the old secret valid
- Device secrets stored AES-GCM encrypted with a deterministic HMAC-SHA256 fingerprint for lookups
- User profiles with image upload; device images and OTA firmware stored in MinIO
- Area details: image, name, location, description, display ordering
- Stations: configurable, renamable, assignable roles (solenoid, sensor, etc.), manual control with countdown feedback
- Full per-day scheduling system: fixed-time or relative time windows, linked to another station, with conflict detection for overlaps and cycles
- Over-the-air firmware updates: versioned uploads with checksums, announced to matching devices, with a last-dispatched sweep that avoids re-announcing the same update
- Dockerized backend with separate dev/prod builds, Compose orchestration for Postgres, Redis, and MinIO, each with health checks
- Deployed on Coolify with secure environment variable injection
- Spring Boot 4, Spring Framework 7: Beginner to Guru, Udemy, Aug 2026
- Intermediate React Native, v2, Master.Dev, Jun 2026
- API Design in Node.js, v5, Master.Dev, Apr 2026
- Enterprise Java with Spring Boot, Master.Dev, Jan 2026
- Java Masterclass 2025: 130+ Hours of Expert Lessons, Udemy, Dec 2025


