# Ender Puentes

> Ten years building product and architecture in production. TypeScript, Node.js, and AI — no fluff, systems you can explain.

I build systemsin production.

Explicit boundaries and systems you can explain. No fluff.

Ender Puentes. Buenos Aires, Argentina.

- [LinkedIn](https://www.linkedin.com/in/enderpuentes)
- [GitHub](https://github.com/enderpuentes)
- [Telegram](https://t.me/enderpuentes)
- [Twitter](https://x.com/enderpuents)
- [Discord](https://discord.com/users/646413570313027604)

Ender Puentes. Buenos Aires, Argentina.

- [LinkedIn](https://www.linkedin.com/in/enderpuentes)
- [GitHub](https://github.com/enderpuentes)
- [Telegram](https://t.me/enderpuentes)
- [Twitter](https://x.com/enderpuents)
- [Discord](https://discord.com/users/646413570313027604)

## How I build and why

If you made it this far, you probably want to know a bit more about me. I've spent many years building software, and what matters to me hasn't changed since the beginning, watching an idea turn into something that actually works.

Code is only part of the job. Some days it's product thinking, other days architecture, watching a deploy, or staying a little longer to figure out why something that worked yesterday stopped working today. That's production. It has a personality of its own.

I also enjoy helping others grow. A good code review doesn't just point out what's wrong, it leaves the other person understanding something they didn't before.

I care about understanding the problem, discussing decisions when they matter, and finding the simplest, most solid way to ship to production.

I work mainly with TypeScript and Node.js, and keep a close eye on AI and agents because the work is changing fast. I adopt new tools when they genuinely improve the product, the team, or how we work.

I'm finishing a Systems Engineering degree, though my career didn't wait for the diploma. Most of what I know I learned by building and getting things wrong on real systems.

Open to new projects, technical challenges, and meaningful collaborations -- whether you are a recruiter, founder, or fellow engineer. Write through the form or email the address on this page. I work from Buenos Aires (GMT-3) and reply in English or Spanish.

Ender Puentes. Buenos Aires, Argentina.

- [LinkedIn](https://www.linkedin.com/in/enderpuentes)
- [GitHub](https://github.com/enderpuentes)
- [Telegram](https://t.me/enderpuentes)
- [Twitter](https://x.com/enderpuents)
- [Discord](https://discord.com/users/646413570313027604)

- Form: https://www.enderpuentes.com/en/contact

Your information stays private and is never shared.

Notes on AI engineering, data pipelines, platform tooling, software architecture, and SEO/AEO — practical deep-dives from production applications.

- [The Team Is the New Context Window](https://www.enderpuentes.com/en/notes/ai-engineering/el-equipo-es-la-nueva-ventana-de-contexto): AI makes the individual developer faster, but not necessarily the team. Give ten developers the same tools and you get ten different ways of working, and that friction gets paid at the team level. The answer is not to make everyone work the same way, it is a shared base of rules, skills, and review criteria.
- [When context starts working against you](https://www.enderpuentes.com/en/notes/ai-engineering/cuando-el-contexto-empieza-a-jugar-en-contra): An hour of Grill.me on a permissions system. I let the agent work and came back to a half-finished implementation: the context of that conversation had swollen and the original plan no longer fit. I dropped it into a file by phases, one new conversation per phase, and that is when it closed.

---
- [Anti-Cliché: I used to spend more time fixing than writing](https://www.enderpuentes.com/en/notes/ai-engineering/antes-tardaba-mas-arreglando-que-escribiendo): I have used Cursor for a couple of years. I started on Tab. When I moved to agents, a chunk of my time went to reviewing and fixing what they generated. I built Anti-Cliché.
- [Knip: dead code when AI agents write faster](https://www.enderpuentes.com/en/notes/platform-engineering/knip-encontrar-codigo-muerto-antes-de-que-se-acumule): AI agents speed up how much code we generate. Knip helps find files, exports, and dependencies nobody uses anymore — and turn that hygiene into an automatic project rule.
- [Grill.me: the skill that changed how I work with AI agents](https://www.enderpuentes.com/en/notes/ai-engineering/grill-me-the-skill-that-changed-how-i-work-with-ai-agents): Why context beats better prompts—and how Matt Pocock's Grill.me skill turned discovery into an explicit part of my AI workflow.
- [Self-Host Agent Skills on Your Website](https://www.enderpuentes.com/en/notes/ai-engineering/self-host-agent-skills-on-your-website): Your website can host installable AI skills — you don't need GitHub. I set this up with Next.js on a production app; the tricky part was getting the www redirect right so npx skills add works, and giving agents persistent product context instead of making things up.
- [.agents: Centralized Rules and Skills for Any AI Editor](https://www.enderpuentes.com/en/notes/ai-engineering/agents-centralized-rules-and-skills-for-any-ai-editor): When everyone on the team uses a different AI editor, rules drift between .cursor, .agent, and .claude. We centralized everything in .agents/ with symlinks and tucked the wiring into VS Code so the repo stays focused.
- [Git Auditor: Native Shell Hooks for a Minimum Viable Team Standard](https://www.enderpuentes.com/en/notes/platform-engineering/git-auditor-native-shell-hooks-for-team-standards): When teams grow, commit styles drift and lint catches up too late. Git Auditor uses versioned shell hooks in .githooks/ to enforce a shared baseline — on your machine, before CI.
- [PostgreSQL Trigger Naming Convention on Supabase](https://www.enderpuentes.com/en/notes/data-engineering/postgres-trigger-naming-convention): PostgreSQL won't auto-update timestamps or clean up related rows — you wire that with triggers. Here's a naming convention that keeps the catalog readable for you and for AI agents on Supabase.
- [Supabase Log Cleanup: Edge Functions and Cron Jobs](https://www.enderpuentes.com/en/notes/data-engineering/supabase-log-cleanup-maintenance): After working on several Supabase-backed projects, I kept hitting the same silent disk problem — log tables that grow forever. Here is the cleanup_logs() function and how to run it safely.
- [Optimizing Form Handling with useTransition Instead of useState](https://www.enderpuentes.com/en/notes/software-architecture/optimizing-form-handling-with-usetransition-instead-of-usestate): Replacing isLoading booleans with useTransition makes forms feel faster, keeps the UI responsive while requests run, and cuts down on the state you have to manage.
- [Using Parallel Routes for the dynamic management of multiple interfaces in Next.js](https://www.enderpuentes.com/en/notes/software-architecture/using-parallel-routes-for-the-dynamic-management-of-multiple-interfaces-in-next-js-14): Next.js 14 Parallel Routes let you render different layouts at the same time — a delivery app example with @client and @driver slots.

Tools and resources I rely on, organized by category — design, backend, AI, CI/CD, and more.

- [MoneyPrinterTurbo](https://www.enderpuentes.com/en/resources/ai-ml/moneyprinterturbo): Turns a topic into a finished short video — script via LLM, stock or AI-generated footage, TTS, subtitles, FFmpeg assembly. 120k+ stars, MIT.
- [OpenExecutive](https://www.enderpuentes.com/en/resources/ai-ml/openexecutive): A virtual executive team of 8 specialist Claude agents behind one coherent persona — CSO, CFO, People, GC, COO, CMO, CPO, Board Comms. FastAPI + Next.js, RAG over your own company docs.
- [Pi](https://www.enderpuentes.com/en/resources/ai-ml/pi): Minimal coding-agent harness you reshape: extensions, skills, AGENTS.md, SYSTEM.md. 15+ providers. Session trees. No MCP or plan mode in core — those are packages. MIT.
- [Engram](https://www.enderpuentes.com/en/resources/ai-ml/engram): Persistent memory for AI coding agents. One Go binary, SQLite + FTS5. MCP, HTTP, CLI, TUI. Local first. Claude Code, Cursor, Codex, Windsurf. Not a transcript dump.
- [Claude Academy](https://www.enderpuentes.com/en/resources/ai-ml/claude-academy): Anthropic's free course catalog — Claude, Claude Code, MCP, agent skills, and the API. Sign in with a Claude account for progress and completion badges. Not the paid Pearson exam.
- [PushFire](https://www.enderpuentes.com/en/resources/email-forms/pushfire): Orchestrator for workflows, broadcasts, push notifications, and email. Journeys on a node graph or one-shot campaigns. FCM for iOS/Android/Web. Resend or SendGrid. Flutter SDK, Node, REST.
- [Ulinkly](https://www.enderpuentes.com/en/resources/apis-automation/ulinkly): Firebase Dynamic Links replacement for iOS, Android, Flutter, and React Native. One URL: app screen, deferred install, or web fallback. Custom domain, analytics, MCP, REST API.
- [Microsoft Clarity](https://www.enderpuentes.com/en/resources/analytics/microsoft-clarity): Free session recordings and heatmaps. Clicks, scroll, rage clicks, insights. Watch the session without instrumenting events. One script. Not product analytics.
- [Sentry](https://www.enderpuentes.com/en/resources/analytics/sentry): Error tracking, performance, and tracing. Stack traces, breadcrumbs, replay. The crash report from the deploy, not the funnel. Cloud or self-host. Source getsentry/sentry.
- [Ahrefs](https://www.enderpuentes.com/en/resources/analytics/ahrefs): SEO crawl and index — backlinks, keywords, site audit, rank tracker, content explorer. Competitive research against a web-scale index, not your own analytics.
- [PostHog](https://www.enderpuentes.com/en/resources/analytics/posthog): Open-source product analytics, replay, flags, experiments, and error tracking in one stack. Cloud or self-host. Events, persons, HogQL. MIT + ee.
- [21st](https://www.enderpuentes.com/en/resources/design-ui/21st): Community registry of React + Tailwind components in shadcn format — copy a prompt into Cursor/Claude, or npx shadcn add. Source lands in the repo. Not a package.
- [shadcn/ui](https://www.enderpuentes.com/en/resources/design-ui/shadcn): Accessible React components you copy into the repo — Radix or Base UI, Tailwind, CLI registry. Not an npm library. You own the code.
- [TanStack Charts](https://www.enderpuentes.com/en/resources/design-ui/tanstack-charts): TypeScript visualization grammar for responsive, accessible, SSR charts — D3 primitives, tree-shakeable marks. Pre-alpha. @tanstack/charts.
- [TanStack Form](https://www.enderpuentes.com/en/resources/data-backend/tanstack-form): Headless, type-safe form state for React, Vue, Angular, Solid, and Lit. Validators per event, granular subscriptions, no UI kit.
- [TanStack Query](https://www.enderpuentes.com/en/resources/data-backend/tanstack-query): Async server-state for React, Vue, Solid, and Svelte — cache, dedupe, retries, background refetch, mutations. The standard this site uses for lists.
- [Liquid Gooey](https://www.enderpuentes.com/en/resources/design-ui/liquid-gooey): React liquid Morph & Move effects — gooey blur, contrast, bouncy springs. npm install liquid-gooey. For menus and blobs that merge instead of fading.
- [morphicons](https://www.enderpuentes.com/en/resources/design-ui/morphicons): Any stroke icon morphs into any other — Lucide, Tabler, Heroicons — with spring physics. Zero deps, ~7 KB gzip. React, Vue, Svelte, RN, and a web component.
- [Mono Charts](https://www.enderpuentes.com/en/resources/design-ui/mono-charts): 30 monochromatic React chart visualizers — heatmaps, sparklines, donuts, candlesticks, sankey — rounded geometry, copy-into-code via the Amicro CLI.
- [Loops explained: Claude, GPT, Mira and what actually works](https://www.enderpuentes.com/en/resources/ai-ml/loops-explained): What an AI loop actually is — goal, verifier, state, stop — when it pays off, how Claude Code runs one, and why a loop without a gate just burns tokens.
- [Portal Labs](https://www.enderpuentes.com/en/resources/team-productivity/portal-labs): 40+ premium, zero-dependency Flutter UI components and interactions — knobs, carousels, morphing inputs, physics gestures. Vanilla Dart/Flutter.
- [Conventional Commits Spec](https://www.enderpuentes.com/en/resources/cicd-code/conventional-commits-spec): Official v1.0.0 specification for human- and machine-readable commit messages. Defines feat/fix types, optional scopes, breaking changes, and footers — the reference behind automated SemVer bumps and changelog tooling.
- [Knip](https://www.enderpuentes.com/en/resources/cicd-code/knip): A tool to find code, exports, and dependencies that are no longer used in JavaScript and TypeScript projects.
- [React Flow / xyflow](https://www.enderpuentes.com/en/resources/design-ui/xyflow): Open-source monorepo for React Flow and Svelte Flow — libraries to build node-based UIs for workflows, visual editors, and diagram tools. MIT licensed, ready out-of-the-box and infinitely customizable.
- [Pretext](https://www.enderpuentes.com/en/resources/design-ui/pretext): Pure TypeScript library for multiline text measurement and layout without DOM reflow. prepare() caches Canvas font metrics once; layout() computes line breaks and height at any width with pure arithmetic — built for Canvas, SVG, WebGL, virtualized chat, and editorial layouts.
- [Anti-Cliché Agent](https://www.enderpuentes.com/en/resources/ai-ml/anti-cliche-agent): Enforce anti-cliché rules across prose, code, UI/UX, and Next.js/Tailwind/React architecture. Install: npx skills add enderpuentes/ai-agent-skills --skill anti-cliche-agent
- [Clinical Tone](https://www.enderpuentes.com/en/resources/team-productivity/clinical-tone): Objective, zero-tolerance CTO/Director-of-Engineering communication — direct diagnosis, no fluff. Install: npx skills add enderpuentes/ai-agent-skills --skill clinical-tone
- [Code Review](https://www.enderpuentes.com/en/resources/cicd-code/code-review): UI/React audit against develop: Tailwind bloat, cn() misuse, class constants, and SRP boundaries. Install: npx skills add enderpuentes/ai-agent-skills --skill code-review
- [Conventional Commits](https://www.enderpuentes.com/en/resources/cicd-code/conventional-commits): Generate and validate commit messages following the Conventional Commits specification. Install: npx skills add enderpuentes/ai-agent-skills --skill conventional-commits
- [Grill Me](https://www.enderpuentes.com/en/resources/team-productivity/grill-me): Stress-test a plan or design with relentless interview questions until decisions are resolved. Install: npx skills add enderpuentes/ai-agent-skills --skill grill-me
- [GSAP](https://www.enderpuentes.com/en/resources/design-ui/gsap): High-performance JavaScript animations with GSAP — timelines, ScrollTrigger, and React patterns. Install: npx skills add enderpuentes/ai-agent-skills --skill gsap
- [JSDoc](https://www.enderpuentes.com/en/resources/cicd-code/jsdoc): Write and maintain JSDoc comments for JavaScript and TypeScript APIs. Install: npx skills add enderpuentes/ai-agent-skills --skill jsdoc
- [JSON-LD](https://www.enderpuentes.com/en/resources/content-cms/json-ld): Add and validate schema.org structured data for SEO rich results. Install: npx skills add enderpuentes/ai-agent-skills --skill json-ld
- [llms.txt](https://www.enderpuentes.com/en/resources/content-cms/llms-txt): Create llms.txt per llmstxt.org for AI assistants and AEO/GEO discoverability. Install: npx skills add enderpuentes/ai-agent-skills --skill llms-txt
- [PageSpeed Insights](https://www.enderpuentes.com/en/resources/monitoring/pagespeed-insights): Audit web pages for performance using Google PageSpeed Insights guidelines. Install: npx skills add enderpuentes/ai-agent-skills --skill pagespeed-insights
- [Sitemap](https://www.enderpuentes.com/en/resources/content-cms/sitemap): Create and maintain XML sitemaps per sitemaps.org for search engine crawl discovery. Install: npx skills add enderpuentes/ai-agent-skills --skill sitemap
- [Split Commit](https://www.enderpuentes.com/en/resources/cicd-code/split-commit): Analyze local git changes and return a copy-paste split-commit command sequence. Install: npx skills add enderpuentes/ai-agent-skills --skill split-commit
- [Storybook](https://www.enderpuentes.com/en/resources/design-ui/storybook): Develop UI components in isolation with Storybook — CSF stories, colocated patterns, and addons. Install: npx skills add enderpuentes/ai-agent-skills --skill storybook
- [Tailwind CSS](https://www.enderpuentes.com/en/resources/design-ui/tailwind-css): Set up and use Tailwind CSS v4 with Next.js, Vite, or CLI — theme via @theme, no tailwind.config.js. Install: npx skills add enderpuentes/ai-agent-skills --skill tailwind-css
- [TypeScript](https://www.enderpuentes.com/en/resources/cicd-code/typescript): Type-safe JavaScript: types, interfaces, generics, narrowing, tsconfig, and strict mode. Install: npx skills add enderpuentes/ai-agent-skills --skill typescript
