Endika Iglesias
$ developer · indie maker
I build small, useful apps that ship — expense splitters, converters, Flipper Zero tools and more. Mostly solo, mostly weekends.
// web apps · 16
Offline-first PWA for travellers: currencies, units, clothing/shoe sizes and tip calculator.
Offline piano-learning PWA: falling-notes practice, a step-by-step path, scales & songs, and record your own melodies. Play by MIDI or microphone.
Offline bodyweight home-workout PWA: build or auto-fill routines, follow guided sessions and track your progress.
Offline PWA that finds the nearest Spanish fuel stations with live prices — cheapest-first, colour-cued, on a list and map. Trip mode follows your route and alerts you to the cheapest station ahead. 6 languages.
Offline PWA that reads sign language from your phone camera and turns it into text. Fingerspells the Spanish Sign Language alphabet live, shows you the hand it is tracking, and lets you teach it your own signs in any sign language. No frame ever leaves the device.
Plan group events and split the costs fairly — availability polls, shared list, settle-up. Real-time, no login.
Offline arcade racer with a twist: draw your wheel's shape mid-race and let real physics decide. Themed biomes, a 15-level campaign and an endless mode.
Offline pass-the-phone party game: everyone shares a secret word except the impostors — give clues, vote and unmask them. 6 languages, no login.
Flashcard study app with AI-generated cards (Gemini, Claude or OpenAI). Offline-first.
Offline poster duel for kids: two movie posters show up, swipe towards the one you keep and it takes on the next challenger. 189 Disney, Pixar and DreamWorks films, and the full history of what beat what at the end.
Free, offline, ad-free PWA to calm down and breathe for a few minutes: guided breathing, a private stress check-in and history. Everything stays on your device.
Client-only PWA that transcribes meetings into summaries, sentiment and a mind map. Bring your own API keys.
Account-free RSVP for kids' birthday parties: per-child answers, live headcount and a venue-ready guest list.
Free pictogram communication PWA for people with ASD and other communication difficulties.
Offline 3D car-sliding puzzle for kids: slide the toy cars to free the red one. Endless rising difficulty, 6 languages.
Offline PWA to identify trees in Spain with an adaptive, no-jargon question key — 174 species with hand-drawn sketches. No login.
// flipper zero · 9
Tamagotchi-style avocado pit in a glass of water you raise on-device (alpha).
Endless side-scroller for Flipper Zero: switch your wheel shape on the fly to match the terrain and roll as far as you can.
Offline habit tracker for Flipper Zero: day-based goals, streaks and progress, SD storage.
Hyperfocal distance calculator for Flipper Zero: focal length, aperture and sensor CoC.
Party word game with impostors (Undercover/Spyfall style), EN/ES, up to 64 players.
NFC inventory manager for Flipper Zero: scan tags, edit stock and track low-stock items.
Identify, manage and safely clean up duplicate Sub-GHz (.sub) files via CRC32 scanning.
Flashcard-style trivia game (ES/EN) with random questions, categories and resume support.
Sliding car puzzle (Rush Hour) for Flipper Zero: 100 levels of rising difficulty — slide the cars to free the red one.
// experiments · 6
SQLite-backed long-term memory for Claude Code with FTS5 search and Markdown backup.
Desktop assistant for meeting transcription, sentiment analysis and summarisation.
My lean Claude Code skills pack: coding conventions, an end-to-end task flow and quality lenses, riding superpowers.
Generate a personal report from your genome data.
See how captured your social feed is — analyze your Instagram/TikTok export 100% in-browser.
Audio monitoring that detects and alerts you about important sounds at home while you're away.
// open source · 18
A single directory the user cannot read made compose watch fail to start, so nothing was watched at all: the ignore list is applied to events, never to the walk that registers the watches.
The EMV parser took each TLV length straight off the card, so tapping a crafted card wrote past several fixed-size fields and a stack buffer.
A reader writing to the emulated NFC tag at offset 1 shifted the stored payload by a byte and spliced in a stale byte from the previous frame.
A sharded query with EXISTS inside a CASE silently dropped half of its WHERE clause and returned the wrong rows.
An outer join against a reference table returned every preserved row once per shard instead of once.
A walrus nested inside a condition, as in if cond and (woo := 5) + n, left the variable optional in the branch where the assignment had certainly run.
Calling an abstract staticmethod or classmethod straight off the abstract class raised no error, even though instantiating that same class does.
DuckDB was modelled as returning NULL on division by zero, but it follows IEEE 754 and returns inf, so transpiled queries diverged.
The same unbounded EMV lengths as the unleashed fix, except here the stack overflow is not compiled out of the release builds the project ships.
The Type 4 Tag write fix, ported to the byte-identical copy of the file this firmware carries.
A constant condition in an if or for statement crashed the interpreter instead of reporting a compile error, taking down any program embedding it.
Using a package name as a value crashed the interpreter five different ways, and inside a return statement it raised no error at all and ran.
Every pull request had a red lint job: the pinned linter was built with an older Go than CI installs, so it panicked before reporting anything.
Instancing a variable font left the BASE table untouched, so instances kept the default baselines and a dangling variation store.
An infinite 2FA loop blocked report fetching: the anisette device identity was partly overwritten with random UUIDs. Behind seven reported issues.
A box with position: absolute stayed in normal flow and ignored its insets entirely, the last piece of CSS 2.1 positioning the engine was missing.
Any exception in a message handler surfaced as error sending request for url: the 200 response line was sent before the handler ran, so the dropped connection looked like a network fault.
A V4 message whose contents were written without the expected envelope was read as having no body at all, so the interaction verified successfully whatever the provider produced.