Программист Full-stack
Обязанности:
Кастомизировать Strapi под нужды проекта: дорабатывать модели данных, плагины, API и внутреннюю архитектуру CMS. Разрабатывать собственные Custom Field Plugins для Strapi, включая новые типы полей и их интеграцию в Content Manager. Глубоко кастомизировать Strapi Design System / Admin Panel на React: injection zones, custom pages, settings sections, custom permissions. Разрабатывать собственные Strapi providers для upload, email и authentication. Расширять Strapi v5 через Document Service API, middleware и custom document operations. Разрабатывать и поддерживать собственные database migrations Strapi, включая миграции больших production-инсталляций между major-версиями. Проектировать и развивать multi-tenant архитектуру Strapi, включая row-level tenant isolation. Разрабатывать и поддерживать frontend-часть проекта одновременно на React и Vue 3/Nuxt. Интегрировать новые возможности CMS в редакторскую систему и пользовательский интерфейс. Развивать собственный rich-text редактор на базе ProseMirror/Tiptap, включая custom extensions и интеграцию редактора непосредственно в Strapi Admin. Реализовывать real-time collaborative editing на базе Yjs/CRDT, синхронизацию документов и разрешение конфликтов. Проектировать REST/GraphQL API и генерировать типизированные TypeScript-клиенты на основе OpenAPI-контрактов. Оптимизировать GraphQL API: persisted queries, DataLoader, устранение N+1. Проектировать сложные структуры данных в PostgreSQL с использованием JSONB, GIN/GiST indexes. Работать с PostgreSQL Row-Level Security (RLS) и интегрировать database-level security с application-level authorization. Использовать PostgreSQL LISTEN/NOTIFY для event-driven взаимодействия. Работать с PostgreSQL Logical Replication / CDC, обрабатывая изменения контента как поток событий. Реализовывать temporal data / audit trail / versioning контента на уровне PostgreSQL. Строить event-driven интеграции на базе NATS JetStream. Использовать Debezium + PostgreSQL CDC для распространения изменений между сервисами. Интегрировать Meilisearch/Typesense со Strapi и обеспечивать синхронизацию поискового индекса через lifecycle/document events. Реализовывать сложные модели авторизации через Open Policy Agent (OPA), Casbin и Keycloak. Интегрировать Strapi с OIDC, включая roles/claims mapping и service-to-service authentication. Настраивать OpenTelemetry для Node.js/Strapi: custom spans, propagation context и distributed tracing. Развивать архитектуру монорепозитория и общие пакеты между backend и frontend. Работать с Module Federation между React и Vue. Оптимизировать SSR-приложения, включая Edge Side Includes / fragment caching для CMS-driven страниц. Работать с Docker, GitLab CI/CD и production-инфраструктурой. Анализировать производительность и production-проблемы на уровне frontend, Node.js, Strapi и PostgreSQL. Участвовать в архитектурных обсуждениях и самостоятельно принимать технические решения.
Требования:
Глубокий коммерческий опыт со Strapi, включая production-проекты со значительной кастомизацией платформы. Опыт разработки Custom Field Plugins и собственных типов полей для Strapi Content Manager. Опыт глубокой кастомизации Strapi Design System / Admin Panel на React. Практический опыт работы с injection zones, custom pages, settings sections и custom permissions. Опыт разработки собственных upload/email/auth providers для Strapi. Практический опыт с Document Service API Strapi v5, middleware и custom document operations. Опыт разработки собственных database migrations и миграции production-проектов между major-версиями Strapi. Опыт построения multi-tenant решений на Strapi, включая row-level tenant isolation. Отличное знание JavaScript/TypeScript и Node.js. Production-опыт одновременно с React и Vue 3/Nuxt. Опыт работы с PostgreSQL Row-Level Security и интеграции RLS с application-level authorization. Практический опыт использования PostgreSQL LISTEN/NOTIFY. Опыт работы с PostgreSQL Logical Replication / CDC. Опыт реализации temporal tables, audit trail или versioning на уровне PostgreSQL. Глубокое понимание JSONB, GIN/GiST indexes, query planner и оптимизации запросов. Опыт разработки на ProseMirror/Tiptap, включая собственные extensions. Понимание CRDT и практический опыт использования Yjs для collaborative editing. Опыт работы с OpenTelemetry в Node.js, включая custom spans, context propagation и distributed tracing. Опыт использования Open Policy Agent (OPA) для externalized authorization. Опыт работы с Casbin или аналогичной policy-based authorization системой. Опыт интеграции Keycloak со Strapi через OIDC, включая roles/claims mapping и service-to-service auth. Практический опыт работы с NATS JetStream. Опыт построения CDC pipeline на базе Debezium + PostgreSQL. Опыт интеграции Meilisearch или Typesense со Strapi с автоматической синхронизацией индекса. Опыт OpenAPI code generation и генерации TypeScript-клиентов из backend-контрактов. Опыт оптимизации GraphQL: persisted queries, DataLoader и N+1. Опыт использования Module Federation между React и Vue. Опыт реализации SSR + Edge Side Includes / fragment caching. Опыт работы с Docker, GitLab CI/CD и монорепозиториями. Умение самостоятельно диагностировать сложные production-проблемы на нескольких уровнях системы. Будет плюсом: Опыт эксплуатации Strapi под высокой нагрузкой и с большими объёмами контента. Опыт разработки собственных механизмов кеширования и сложной cache invalidation. Опыт построения CMS-платформ с несколькими frontend-приложениями и независимыми consumers. Опыт построения отказоустойчивых event-driven систем. Опыт интеграции Strapi с legacy-системами и внешними корпоративными сервисами. Опыт написания integration/E2E-тестов для связки Strapi + PostgreSQL + frontend. Опыт профилирования Node.js-приложений и поиска memory leaks / event-loop bottlenecks. Опыт проектирования систем, в которых Strapi используется не просто как CMS, а как основа сложной редакторской платформы
