Frontend
Architect
4 horas diarias, lunes a viernes. 120 horas de contenido completadas en 6 semanas. Al terminar, 15 dias de descanso antes de iniciar el Backend.
Consolidar los fundamentos avanzados
JavaScript internals, TypeScript avanzado, patrones de arquitectura frontend y tooling moderno. Las bases mentales que un arquitecto necesita antes de entrar a los frameworks.
class: es prototype chain, closures y this. La reactividad empieza con el Observer Pattern, mucho antes de que existieran los Signals.Dominio enterprise
De la API clásica a las APIs modernas. Lifecycle hooks, RxJS, Signals, Forms, NgRx y Module Federation. El framework enterprise por excelencia.
Sistemas a escala
Micro-frontends, design systems, performance, API patterns, security, a11y, testing y CI/CD. El salto de senior a arquitecto.
Los 8 Pilares del Arquitecto Frontend
Un arquitecto frontend no es solo un senior que sabe más. Es alguien que diseña sistemas, habilita equipos y toma decisiones que perduran en el tiempo.
Distribucion semanal
20 horas semanales en 4 horas diarias de lunes a viernes. Cada modulo de contenido (~6h) se completa en 1.5 dias. Los 20 modulos de la ruta se cubren en 6 semanas calendario.
Contenido de la semana
- Prototypal inheritance: `prototype`, `__proto__`, `Object.create` — la herencia real detrás de `class` ES6; entender esto hace que todo Angular DI y los decoradores tengan sentido
- `class` ES6 y `this` binding: campos privados (#), static, extends, super — y las 4 reglas de `this`: implícita, explícita (call/apply/bind), new, arrow — el error más frecuente en callbacks y event handlers
- Closures y Execution Context: scope chain, variable capture, IIFE — la base conceptual de los servicios como singletons y del patrón module antes de ES modules
- Event Loop profundo: call stack, microtask queue (Promise/queueMicrotask), macrotask queue — por qué el orden importa en el browser y en el change detection de Angular
- Observer Pattern & Reactivity mental model: publicador/suscriptor, pull model (dirty checking / Zone.js) vs push model (Signals / Observables) — el puente que une AngularJS con Signals y RxJS
- Proxy & Reflect: trampas (get/set/has/apply), meta-programación — la base interna de Vue 3 Reactivity System, MobX y de cómo Angular Signals detecta cambios sin Zone.js
Fuentes de referencia
Contenido de la semana
- TypeScript Generics avanzados: constraints (extends), infer en conditional types, mapped types con -readonly/-? — type systems que documentan la arquitectura sin comentarios
- Template Literal Types, Discriminated Unions y Branded Types: el type system como herramienta de arquitectura — hacer imposibles los estados imposibles
- Feature-Sliced Design (FSD): capas (shared/entities/features/widgets/pages/app), reglas de dependencia — solo hacia abajo, nunca lateral
- Clean Architecture y SOLID en componentes: casos de uso, ports & adapters, SRP por componente, DIP (inyectar servicios) — adaptados al browser
- Vite internals: dev server con ESM nativo + HMR, producción con Rollup — por qué es 10x más rápido que webpack y cuándo importa en Angular
- Monorepos: Nx vs Turborepo — DAG de tareas, caché local y remota, generators, affected commands — la base para escalar a múltiples apps Angular
Fuentes de referencia
Contenido de la semana
- Anatomía de un componente Angular: selector, template, styles, encapsulation, changeDetection — la base que todo el ecosistema hereda
- @Input y @Output decoradores: property binding, EventEmitter, unidirectional data flow — la API clásica presente en todo código legado que vas a leer y mantener
- Lifecycle hooks completos: ngOnChanges, ngOnInit, ngDoCheck, ngAfterViewInit, ngOnDestroy — cuándo se dispara cada uno y los errores más comunes
- Memory leaks con subscriptions: el patrón takeUntil + Subject completado en ngOnDestroy — el bug más frecuente en Angular y cómo evitarlo
- async pipe: el pipe que gestiona subscribe y unsubscribe automáticamente — por qué es la práctica correcta para Observables en templates
- Directivas estructurales: *ngIf, *ngFor, *ngSwitch — cómo se transforman en ng-template y el contexto implícito que produce bugs silenciosos
Fuentes de referencia
Contenido de la semana
- DI Jerárquico: ModuleInjector (app-level) vs ElementInjector (component-level), cómo se resuelve la cadena de providers
- InjectionToken: tokens tipados para valores no-clase, multi providers, useFactory con deps declaradas explícitamente
- Standalone Components: bootstrapApplication, provideRouter, importProvidersFrom — eliminando NgModules correctamente
- Angular Signals: signal(), computed(), effect() — el modelo reactivo que reemplazará Zone.js gradualmente en v20+
- Signal Inputs/Outputs: input(), output(), model() — el reemplazo moderno de @Input/@Output desde Angular 17
- OnPush ChangeDetectionStrategy: por qué activarla en toda la app con Signals, signal() como único trigger de detección
Fuentes de referencia
Contenido de la semana
- input() signal-based: el reemplazo moderno de @Input desde Angular 17 — required(), alias, transform para convertir el valor entrante
- output() signal-based: OutputEmitterRef — reemplaza @Output/EventEmitter con tipado estricto y sin decoradores en standalone
- model(): two-way binding reactivo con Signals — la alternativa moderna a [(ngModel)], composable y con historial de cambios observable
- linkedSignal (Angular 19+): signal derivado que acepta escritura manual — casos de uso reales: paginación que se resetea, selección dependiente de otro filtro
- resource() API (Angular 19+): fetching declarativo con estados loading/error/value como Signals — alternativa al patrón HttpClient + async pipe en templates
- Zoneless Angular (Angular 18+): provideExperimentalZonelessChangeDetection — por qué Zone.js fue siempre un parche y cuál es el futuro de la detección de cambios
Fuentes de referencia
Contenido de la semana
- Observable contract: Producer/Observer/Subscriber, cold vs hot observables — la diferencia que determina si el stream se repite o comparte estado entre suscriptores
- Subjects: Subject (control manual), BehaviorSubject (valor inicial + replay para late subscribers), ReplaySubject (buffer N), AsyncSubject (solo último antes de complete)
- State Services con BehaviorSubject: el patrón pre-NgRx — servicio con BehaviorSubject privado y Observable público vía asObservable() — el código más frecuente en proyectos legacy
- Operators fundamentales: map, filter, tap (side effects puros), take, debounceTime, distinctUntilChanged, shareReplay — el 80% del uso real en Angular
- Error handling en RxJS: catchError (recuperarse del error), throwError (relanzar tipado), retry, EMPTY para silenciar, NEVER para stream eterno
- Unsubscription correcta: Subscription.add() para colecciones, takeUntil + Subject, takeUntilDestroyed(destroyRef) en contexto Angular — cuándo usar cada uno
Fuentes de referencia
Contenido de la semana
- Operators de aplanamiento: switchMap (cancela anterior), exhaustMap (ignora nuevos), mergeMap (todos paralelos), concatMap (en orden)
- Subjects: BehaviorSubject (con valor inicial), ReplaySubject (buffer N), AsyncSubject (solo último antes de complete)
- Higher-order Observables: combineLatest, forkJoin, withLatestFrom, race, zip — cuándo y cuáles son los trade-offs
- Custom Operators: función que retorna OperatorFunction — composición reutilizable, testing aislado del operator
- toSignal / toObservable: el bridge entre el mundo Observable y Signal en Angular — completionBehavior y las trampas
- Marble Testing: TestScheduler de RxJS, marble syntax completa (-, |, #, ^), testing temporal de streams complejos
Fuentes de referencia
Contenido de la semana
- Reactive Forms: FormControl (con value y status como Signals desde Angular 14), FormGroup, FormBuilder — por qué template-driven forms no escalan en apps enterprise
- FormArray: listas dinámicas de controles, addControl/removeAt, validar el array completo como unidad — el caso clásico de ítems dinámicos
- Validators síncronos y asíncronos: ValidatorFn, AsyncValidatorFn, cross-field validation en el FormGroup padre — composición sin duplicación
- Custom Validators: función pura que recibe AbstractControl y retorna ValidationErrors | null — testeable sin DOM, reutilizable entre formularios
- HttpClient: get/post/put/delete tipados con genéricos, HttpParams, HttpHeaders, responseType — el cliente HTTP oficial de Angular con soporte SSR
- Interceptors funcionales (Angular 15+): HttpInterceptorFn, cadena de interceptors — auth token bearer, logging de requests, error handling global con retry
Fuentes de referencia
Contenido de la semana
- NgRx Store: createAction (con props tipados), createReducer (con immer), el ciclo unidireccional Action→Reducer→Store
- Selectors: createSelector con memoización automática, composed selectors, selectSignal en Angular 17+ — solo via selector
- Effects: Actions stream, ofType operator, tap vs switchMap vs exhaustMap en efectos, error handling con catchError + EMPTY
- Entity Adapter: normalización de colecciones (id como key), selectAll/selectEntities, CRUD pattern predefinido
- NgRx SignalStore: el nuevo estándar — withState, withComputed, withMethods, patchState — más conciso que el Store clásico
- Component Store: estado local de componentes complejos, alternativa para casos acotados sin Redux global
Fuentes de referencia
Contenido de la semana
- Lazy Loading con standalone: loadComponent vs loadChildren, nested lazy routes — cómo el router resuelve los bundles en runtime sin configuración de webpack
- Guards funcionales: canActivate, canDeactivate, canMatch como funciones puras con inject() — eliminando clases Guard con boilerplate innecesario
- Resolvers funcionales: resolve como función que retorna Observable/Promise — datos pre-cargados antes de activar la ruta sin loading states en componentes
- Deferrable Views (@defer): triggers (on viewport, on interaction, when condition), prefetch strategies — lazy loading de UI sin split de ruta
- Preloading Strategies: PreloadAllModules, QuicklinkStrategy (solo links visibles en viewport), custom preloader — impacto en LCP y TTI
- Angular CDK: component harnesses para testing sin acceder al DOM directo, drag-and-drop, virtual scroll, overlay API
Fuentes de referencia
Contenido de la semana
- Spectator: createComponent, createService, byRole/byText — la forma más limpia de testear Angular sin boilerplate de TestBed
- ng-mocks: MockComponent, MockDirective, MockPipe, MockProvider — aislamiento correcto, sin over-mocking
- TestBed avanzado: override providers en tests standalone, configureTestingModule, runInInjectionContext
- Testing Signals: TestBed.flushEffects(), assertions sobre signal values, testing de computed values y side effects
- Marble Testing en Angular: TestScheduler de RxJS, marble syntax completa, testing de NgRx Effects con virtualización temporal
- Cypress Component Testing: montar Angular components en browser real, hot reload, sin setup de E2E completo
Fuentes de referencia
Contenido de la semana
- Module Federation: host (shell) y remote apps, webpack.config exposes vs remotes, shareScope para singletons
- @angular-architects/module-federation: loadRemoteModule, routing dinámico hacia remotes en runtime
- Shell Application: routing de micro-frontends, error boundaries por remote, fallback cuando el remote falla
- Shared State entre apps: custom events (CustomEvent/BroadcastChannel), shared libs via singleton en scoping
- Contratos entre shell y remote: versionado semántico de la interfaz expuesta, breaking change detection
- Deploy independiente por remote: 3 pipelines separados, registry de remotes en JSON/API, rollback de un solo app
Fuentes de referencia
Contenido de la semana
- CSR vs SSR vs SSG: impacto en TTFB, LCP, SEO, complejidad operacional y costo de infraestructura — cuadro comparativo
- ISR (Incremental Static Regeneration): stale-while-revalidate para páginas, revalidación on-demand por tag
- Islands Architecture: hidratación parcial, componentes isleños solo donde hay interactividad — Astro como caso de estudio
- Streaming SSR: chunks progresivos con Suspense en React, Angular SSR con hydration y prerendering de rutas
- Angular SSR options: outputMode: static (prerendering completo) vs server (dinámico) — cuándo cada uno
- Edge Rendering: ejecutar SSR en CDN edge nodes, Vercel Edge Functions, Cloudflare Workers — trade-off latencia vs cold starts
Fuentes de referencia
Contenido de la semana
- Cuándo micro-frontends: múltiples equipos con releases independientes — y cuándo NO agregar esta complejidad
- Module Federation 2.0: nuevo runtime, dynamic federation, type-safe sharing, version management entre equipos
- Single-SPA: orchestrator-based approach, parcels para componentes transversales, múltiples frameworks en una página
- Contratos entre apps: API de eventos compartidos, shared component libraries con versioning semántico
- Cross-app Routing: deep linking entre micro-frontends, URL como único contrato de navegación entre equipos
- Pipelines por app: CI/CD independiente por remote, registry de remotes en CDN/API, rollback granular
Fuentes de referencia
Contenido de la semana
- Design Tokens: tokens semánticos vs primitivos, W3C DTCG format, Style Dictionary — pipeline completo de tokens a CSS/JS/iOS
- Component API Design: composición vs configuración, variance con class-variance-authority (CVA), compound pattern y slots
- Storybook 8: stories como documentación viva, Controls, Decorators, Accessibility addon, MSW integration en stories
- Chromatic: visual regression en CI, story-by-story diffing, workflow de review automático, umbral de cambio configurable
- Publishing en npm: semantic versioning, Changesets para CHANGELOG automático, peer dependencies y bundling con Vite lib mode
- Web Components como delivery mechanism: LitElement, framework-agnostic components, adoptabilidad cross-stack
Fuentes de referencia
Contenido de la semana
- Core Web Vitals: LCP (Largest Contentful Paint), INP (Interaction to Next Paint, reemplazó FID en 2024), CLS (Layout Shift)
- RUM vs Synthetic: Web Vitals API en producción real (CrUX) vs Lighthouse — por qué el Lab no refleja el campo
- Resource Hints: preconnect, preload (LCP images), prefetch (next route), modulepreload — cuándo y en qué orden
- Service Workers: Cache First, Network First, Stale While Revalidate — Workbox para no escribirlos desde cero
- Image Pipeline: Angular ngOptimizedImage, srcset + sizes, lazy loading nativo, AVIF/WebP, responsive images pipeline
- Performance Budgets: presupuestos por métrica en lighthouse-ci, alertas en GitHub Actions por degradación de score
Fuentes de referencia
Contenido de la semana
- BFF (Backend for Frontend): por qué el frontend no debería hablar directo a microservicios — aggregation y shaping
- tRPC: end-to-end type safety sin código generado, procedimientos, queries y mutations con React Query adapter
- Apollo Client: cache normalizado (normalize por __typename + id), optimistic updates, polling, subscriptions
- Optimistic Updates en TanStack Query: useMutation, onMutate, rollback con onError — UX de baja latencia percibida
- Cache Invalidation: invalidateQueries granular, staleTime strategies por endpoint, refetchOnWindowFocus
- WebSockets vs SSE: cuándo usar cada uno, reconnection exponential backoff, state management de realtime data
Fuentes de referencia
Contenido de la semana
- XSS en el browser: reflected, stored, DOM-based — cómo Angular mitiga automáticamente y dónde sigue siendo vulnerable
- CSP (Content Security Policy): headers, nonces para inline scripts, strict-dynamic — configuración real en Nginx/Vercel
- Auth en SPA: OAuth 2.0 + PKCE en aplicaciones SPA, token storage seguro (cookie HttpOnly es la respuesta correcta)
- WCAG 2.2 AA: criterios de percepción, operabilidad y robustez — los 10 más relevantes para SPAs interactivas
- ARIA Authoring Practices Guide: roles, properties, states — patrones del W3C para Modal, Accordion, Combobox, Tabs
- axe-core en CI: @axe-core/playwright en E2E, @axe-core/react en unit tests — configurar severidad y desactivar falsos positivos
Fuentes de referencia
Contenido de la semana
- Testing Trophy: integration tests (foco principal) > unit (lógica pura) > E2E (flujos críticos) — la proporción correcta
- Contract Testing con Pact.js: contrato consumer-driven entre frontend y backend, independencia de deploys entre equipos
- Visual Regression CI: Chromatic en GitHub Actions, diff automático por story, workflow de aprobación de cambios visuales
- GitHub Actions avanzado: matrix builds, reusable workflows, caché de node_modules con actions/cache, artifacts entre jobs
- Feature Flags: LaunchDarkly, Statsig, OpenFeature estándar — gradual rollout, kill switch, A/B testing por usuario
- Preview Deployments y Canary: Vercel preview por PR, Cloudflare Pages, estrategia de promotion gradual a producción
Fuentes de referencia
Contenido de la semana
- Diseño documentado con ADRs: una decisión técnica por componente del sistema (shell, remotes, design system, CI/CD)
- C4 Model nivel Container y Component: diagrama de la arquitectura completa con Structurizr DSL o Mermaid C4
- Design system en Nx monorepo: tokens semánticos, componentes para Angular, Storybook por librería
- Module Federation: shell Angular + 2 remotes con singletons compartidos y routing dinámico
- Pipelines independientes: GitHub Actions workflows, registry de remotes en JSON/API, rollback por app
- Observabilidad por micro-frontend: Web Vitals API separada por app, Sentry con source maps, alertas por remote
Fuentes de referencia
Libros recomendados
Recursos esenciales organizados por fase del programa. Los que ya tenes marcados son los que debes leer primero.

