OcteliumIgnI/angular dev

Открыт к предложениям · Remote / Middle+

IgnI

/Angular Dev

Frontend / Angular Developer · Angular 16–22 · TypeScript Strict

Разрабатываю веб-приложения на Angular (16–22), TypeScript и RxJS. Специализируюсь на реактивном стейте с Signals, сложных формах (CVA), потоковых данных WebSockets / SSE и архитектуре в Nx-монорепозиториях. В pet-проектах пишу системные утилиты на Rust.

Angular 22Signals & RxJSReactive Forms (CVA)TypeScript StrictZoneless CDNx 22 MonorepoWebSockets & SSEVitest
Опыт и проекты

Проекты

Коммерческая разработка и open-source проекты с исходным кодом и инженерным разбором.

2024–2026•Fullstack & Systems Developer (Author)

VortexDL

Медиаплеер и загрузчик музыки без облачных стримингов: Rust 2024 бэкенд + встроенный Angular 22 клиент.

  • Параллельный bounded-конвейер загрузок с отменой, очередью и live progress по WebSockets
  • Встроенный в бинарник веб-клиент на Angular 22 с кастомным drag-to-select и виртуализацией CDK
  • Автоматическое обнаружение Android/Hi-Fi устройств и двусторонняя синхронизация по протоколу ADB
  • Локальное хранение метаданных в redb, парсинг ID3-тегов и экспорт бэкапов в WebDAV
Rust 2024Angular 22AxumSignalsRxJSredbSymphoniaID3ADB Protocol@angular/cdkWebDAVNix Flakes
2026•Lead Frontend Developer & Architect

Arcania

Enterprise монорепозиторий контентно-коммерческой платформы: клиентский портал, админ-панель и общая UI-библиотека.

  • Nx 22 монорепозиторий: client portal, admin panel и изолированная UI-библиотека (@arcania-inc/ui-kit)
  • Сложные каталожные структуры, многошаговый payment flow и интерактивный 3D-просмотр Three.js
  • Angular SSR с серверной предзагрузкой и оптимизацией Core Web Vitals
  • CI/CD pipeline: определение affected-модулей, production сборка и прогрев Cloudflare кэша
Angular 21TypeScriptNx 22Yarn WorkspacesAngular SSRRxJSAngular Material/CDKThree.jsngx-chartsSCSSGitHub Actions
2024–2025•Fullstack / Systems & Angular Developer

Elux

Control plane и веб-интерфейс управления конфигурациями и процессами Xray-core на базе Rust Axum и Angular.

  • Rust Axum REST/WebSocket control plane с управлением процессами ядра Xray и hot-reload
  • Парсер и конвертер протоколов Shadowsocks, Trojan, VLESS и VMess
  • Angular 20 фронтенд на Taiga UI с Monaco Code Editor и дашбордом метрик
  • Rust-to-Go/C ABI FFI связка через build.rs и bindgen; мультистейдж Docker-пакет
Rust 2024Angular 20AxumTokioSQLite (rusqlite/r2d2)Taiga UIMonaco EditorGo / C ABIbindgenDockerDevbox/Nix
2026•Linux Desktop / Systems Developer (Author)

Zonex

Нативный GTK4/libadwaita менеджер архивов под Wayland с виртуальной файловой системой FUSE и drag-and-drop.

  • Виртуальная файловая система FUSE (fuser/FUSE3) для мгновенного drag-and-drop без временной распаковки
  • Движки архивации ZIP, TAR, GZip, Zstandard с определением по magic bytes
  • Интерфейс на GTK4 / libadwaita с поддержкой Wayland и системных диалогов GNOME
  • Встроенные security-тесты на защиту от атак Zip Slip и проверку целостности данных
Rust 2021GTK4libadwaitaWaylandFUSE3 (fuser)ZIP / TARzstd / gziplibarchiveNix FlakesJustClippy
2026•Rust Systems / Network Developer

AUSWP

Асинхронный ротатор прокси и SOCKS5 балансировщик на Rust с preflight-чеками, VLESS и TUN-маршрутизацией.

  • Preflight health-check и замер пропускной способности пула перед активацией прокси
  • Неблокирующий SOCKS5 сервер с атомарной round-robin балансировкой и failover
  • Поддержка VLESS URI / JSON форматов и конвертация под ядра sing-box / Mihomo
  • Опциональный режим TUN-маршрутизации и GeoIP-привязка
Rust 2024Tokioreqwest / rustlstokio-socksSOCKS5VLESSsing-boxMihomoTUNMaxMindDBNix Flakes
Архитектура & Стек

Технический стек

Типизированные конфигурации, инженерные стандарты и архитектурные решения в коммерческой разработке.

import {
ApplicationConfig,
provideZonelessChangeDetection
} from '@angular/core';
 
export const coreArchitecture = {
platform: 'Angular 22 (Standalone)',
reactivity: {
engine: 'Signals & computed()',
changeDetection: 'Zoneless (0 overhead)',
controlFlow: ['@if', '@for', '@switch', '@let']
},
typeSafety: {
mode: 'TypeScript Strict',
strictNullChecks: true,
noImplicitAny: true
},
strategy: 'provideZonelessChangeDetection()'
} as const;

Angular & Reactive Core

Архитектура реактивного ядра на Signals, отказ от Zone.js для бескомпромиссной производительности и строгая типизация.

Ключевые практики & стандарты

  • Гранулярное обновление DOM через Signals и computed() без Zone.js
  • Нативный Zoneless Change Detection по умолчанию без Zone.js оверхеда
  • Современный Control Flow (@if, @for, @switch, @let) и @defer
  • Zero Any, строгие интерфейсы и type narrowing во всех слоях

Технологии & инструменты

Angular 16–22Signals & Computed@rx-angular/stateZoneless CDTypeScript StrictControl Flow (@defer)Standalone Components
TypeScript Strict: 0 errorsUTF-8Spaces: 2
Angular v22Zoneless Engine
Архитектурный выбор (2026)

Почему Angular, а не React, Vue или Svelte

Сравнение архитектурных подходов: Signals, нативный Zoneless, иерархический DI, строгая типизация шаблонов и экосистема без зоопарка зависимостей.

Библиотека интерфейсов без встроенного фундамента

Аспекты архитектурного сравнения5

React
Virtual DOM и ре-рендер функций в React 19
  • Virtual DOM оверхед: повторный прогон функции компонента сверху вниз и diff деревьев при каждом изменении стейта
  • Stale closures: риск рассинхронизации замыканий и зависимостей в хуках даже при наличии React Compiler
  • INP просадки: блокировка главного потока браузера при реконсиляции динамических списков
function Counter({ id }: { id: string }) {
  const [count, setCount] = useState(0);
  const handleClick = useCallback(() => {
    setCount(c => c + 1);
    analytics.track(id, count); // Stale closure без Ref!
  }, [id, count]);
  return <button onClick={handleClick}>{count}</button>;
}
Angular
Signal Graph & Нативный Zoneless
  • Signal Graph: прямое точечное обновление узлов DOM без обхода дерева компонентов и без Virtual DOM
  • Нативный Zoneless: нулевой оверхед (без monkey-patching браузерных API через Zone.js)
  • Предсказуемый рантайм: чистая синхронная реактивность без хуков, зависимостей и каскадных ре-рендеров
@Component({
  template: `<button (click)="inc()">{{ count() }}</button>`
})
export class Counter {
  readonly id = input.required<string>();
  readonly count = signal(0);

  inc() {
    this.count.update(c => c + 1);
    analytics.track(this.id(), this.count());
  }
}
React
Ручной React.lazy и водопады Suspense
  • Ручной бойлерплейт: связка React.lazy, обёрток Suspense и сторонних IntersectionObserver библиотек
  • Каскадные водопады (Waterfalls): последовательная загрузка вложенных чанков и сдвиги макета (CLS)
  • Неуправляемые плейсхолдеры: мерцание интерфейса при загрузке без декларативной оркестрации
const HeavyChart = React.lazy(() => import('./HeavyChart'));

function Analytics() {
  const { ref, inView } = useInView({ triggerOnce: true });
  return (
    <div ref={ref}>
      {inView && (
        <Suspense fallback={<ChartSkeleton />}>
          <HeavyChart />
        </Suspense>
      )}
    </div>
  );
}
Angular
Декларативный синтаксис @defer
  • Декларативный @defer: компилятор автоматически выносит зависимости в чанки без ручного кода
  • Встроенные триггеры: on viewport, prefetch on idle, hydrate on interaction из коробки
  • Оркестрация состояний: нативные блоки @placeholder, @loading и @error без сторонних библиотек
@defer (on viewport; prefetch on idle) {
  <heavy-chart />
} @placeholder (minimum 300ms) {
  <chart-skeleton />
} @loading {
  <loading-spinner />
}
React
Hydration Mismatch и RSC-фрагментация
  • RSC-фрагментация: раскол кодовой базы директивами "use client" / "use server" и путаница с пропсами
  • Блокировка ввода: потеря пользовательских кликов и событий до завершения полной гидратации бандла
  • Hydration Mismatch: частые ошибки рассинхронизации DOM сервера и клиента, требующие ре-рендера
export default function UserCard({ id }: { id: string }) {
  const [user, setUser] = useState<User | null>(null);

  useEffect(() => {
    const ctrl = new AbortController();
    fetchUser(id, { signal: ctrl.signal }).then(setUser);
    return () => ctrl.abort(); // Обязательный ручной cleanup
  }, [id]);

  return <div>{user?.name}</div>;
}
Angular
Non-destructive Hydration & Event Replay
  • Non-destructive Hydration: серверный HTML сохраняется без перерисовки и мерцания в браузере
  • Event Replay: события до завершения гидратации буферизируются и воспроизводятся без потерь ввода
  • Инкрементальная гидратация: компоненты гидрируются только при взаимодействии через @defer
@Component({
  template: `<div>{{ user.value()?.name }}</div>`
})
export class UserCard {
  readonly id = input.required<string>();
  readonly user = resource({
    params: () => this.id(),
    loader: ({ params, abortSignal }) => fetchUser(params, { signal: abortSignal })
  });
}
React
Фрагментированный зоопарк зависимостей
  • Зоопарк библиотек: сборка архитектуры из 10+ сторонних пакетов (роутер, стейт, формы, кверис)
  • Архитектурный хаос: отсутствие единых стандартов, Context API провоцирует неконтролируемые рендеры
  • Хрупкие обновления: при обновлении одного пакета ломаются соседние интеграции и типы
// Ручная связка внешних библиотек и потеря типов в контроллере
const { control } = useForm<UserProfile>({
  resolver: zodResolver(userSchema)
});

return (
  <Controller
    name="address.city"
    control={control}
    render={({ field, fieldState }) => (
      <CustomInput {...field} error={fieldState.error?.message} />
    )}
  />
);
Angular
Встроенная платформа & Иерархический DI
  • Единая платформа: роутинг, HttpClient, DI и формы поставляются и поддерживаются вендором
  • Иерархический DI: строгий контроль скоупов сервисов от корня приложения до конкретного элемента
  • Типобезопасные Reactive Forms: FormGroup и FormArray со строгой типизацией контролов
// Строго типизированный FormBuilder платформы + единый CVA
readonly form = inject(FormBuilder).nonNullable.group({
  address: this.fb.group({
    city: this.fb.control('', [Validators.required])
  })
});
// Подключение кастомного контрола единообразно:
// <custom-input formControlName="city" />
React
Сотни часов ручного рефакторинга
  • Ручной рефакторинг: поломки мажорных версий (React 18 → 19, Next/Remix) требуют сотен часов правок
  • Зависимость от мейнтейнеров: месяцы ожидания адаптации сторонних библиотек под новые версии React
  • Устаревание кода: кодовая база 3-летней давности часто требует полной переписки с нуля
# Ручной аудит несовместимых пакетов и ломающихся хуков
npm install react@19 react-dom@19
# npm ERR! ERESOLVE could not resolve dependency:
# peer react@"^18.0.0" from react-hook-form, @tanstack/react-query...
# Десятки часов ручной адаптации кодовой базы
Angular
Автоматический ng update (AST Codemods)
  • Официальный ng update: автоматические AST-миграции кодовой базы запускаются одной консольной командой
  • Гарантированный LTS: предсказуемый 6-месячный релизный цикл с поддержкой обратной совместимости
  • Эволюция без переписывания: плавный переход на Standalone, Signals и Control Flow без остановки фич
# Официальный AST Codemod запускается одной командой
ng update @angular/core @angular/cli

# ✔ Автоматическая миграция Control Flow (@if, @for)
# ✔ Автоматический перевод Inputs/Outputs на Signals
# ✔ Автоматическое обновление зависимостей и TypeScript
igni@dev : ~/architecture$platform --audit react-ecosystem --year 2026
  • [ PASS ]Reactivity→

    Signal Graph: точечные обновления DOM без Virtual DOM и без Zone.js (нативный Zoneless)

  • [ PASS ]Architecture→

    Иерархический DI с InjectionToken вместо Context API и глобальных синглтонов

  • [ PASS ]Data & Defer→

    Декларативный синтаксис @defer и Event Replay вместо RSC-водопадов и Hydration Mismatch

  • [ PASS ]Evolution→

    Официальные AST Codemods (ng update) вместо сотен часов ручных переписываний ломающихся библиотек

Итоговый вердикт (2026)

Целостная платформа с нативным Zoneless вместо хрупкого клея из 10+ сторонних библиотек

В 2026 году React Compiler частично автоматизировал мемоизацию, но не решил фундаментальные проблемы: реконсиляцию Virtual DOM, каскадные рендеры поддеревьев, отсутствие Dependency Injection и постоянный дрейф сторонних пакетов. Angular предоставляет сбалансированную экосистему, где Signals, Zoneless, @defer и Event Replay работают синхронно под контролем Google.