Selected work / Case study 01

Compfeed.

Building collaborative, AI-assisted
design-system workflows.

Connecting the design, the contribution process, and the documentation—across Figma and the web.

ROLE
Backend Engineer → Full-stack Engineer
TIMELINE
–
COLLABORATION
Worked with four teammates
PRODUCT
Figma + web · Design systems
ONE CONNECTED WORKFLOW

Design. Contribute. Document.

A finished design.
An unfinished process.

A component can look complete while its rationale, use cases, properties, and documentation remain unresolved.

Compfeed makes that work visible through contribution phases, tasks, and supporting notes. The Figma widget puts the process beside the design; the web application gives the team a place to develop and document it together.

My part in the product

I joined an existing product as a Backend Engineer, moving into a Full-stack Engineer role in June 2025. I built Playground and Manifest features, AI documentation, the custom Figma MCP integration, and component dashboard functionality.

I migrated Express.js to NestJS and set up Docker-based deployments. Other teammates initially owned the widget; I later took over its maintenance.

Technical foundation

  • React
  • Next.js
  • Tailwind CSS
  • Express.js
  • NestJS
  • Tiptap
  • Yjs
  • Hocuspocus
  • Firebase Realtime Database
  • PostgreSQL
  • LangChain
  • OpenAI
  • pgvector
  • Pinecone
  • Figma REST API
  • OAuth
  • Custom MCP server

Follow a contribution.

From a linked design to a document the team can refine.

ILLUSTRATIVE WORKFLOW · NOT A SCREENSHOT

From contribution
to documentation.

  1. Contribution notes + linked design context
  2. AI-assisted documentation draft
  3. Human review, correction, and refinement

Product detail · Select to enlarge.

Link a design in Figma.

A frame, section, or page becomes the design reference for a contribution. The checklist stays beside the work.

My contributionI later took over maintenance of the existing widget, including its data management and associated flows.

Review contributions in the dashboard.

Design previews, phase labels, progress, and filters connect individual components to the wider contribution process.

My contributionI built dashboard functionality around linked design information.

Develop the contribution in Playground.

The design preview, property inspection, phases, tasks, and notes share one workspace.

My contributionI built Playground features and coordinated collaborative content with dynamic workflow updates.

Prepare documentation in Manifest.

Contribution context and linked Figma information support a first draft that people review and refine.

My contributionI built Manifest and AI documentation functionality. The integration reached customer beta.

Two sources.
One document.

Collaborative edits and Firebase-driven reordering could overlap, inserting duplicate task and user-content nodes.

I protected the relevant editor-update operations with a mutex. Each operation acquired the lock, applied its changes, and released it before the next entered that path.

COORDINATING PROTECTED UPDATE PATHS
Collaborative editsFirebase workflow updates
Protected updateAcquire lock · apply changes · release
DocumentNext operation enters after release
Consistency over immediate processing

An incoming operation may wait while the current update completes. Coordinating these protected paths addressed the observed duplication race.

Why checks and delays fell short

I tried tracking task, phase, and content IDs, adding delays or debouncing, and improving provider lifecycle and synchronization checks. They reduced symptoms without reliably coordinating all asynchronous editor-update paths. Explicitly protecting the boundary was the useful shift.

One user waits.
The others continue.

A queue organizes work. It does not tell a job whether it is eligible to run.

I persisted per-user cooldown timestamps after Figma returned HTTP 429. Background jobs checked this state before sending another request, deferring affected work while other users continued.

BACKGROUND JOB ELIGIBILITY · CONCEPTUAL ORDER
User AHTTP 429Cooldown saved · jobs deferredEligible to retry
User BJob queuedIndependent processing continuesStored context updated
Freshness versus reliability

The affected user’s stored context can lag during cooldown. Background jobs avoid repeated requests during a known restriction while other users continue.

Less data.
More relevant context.

A Figma response is not automatically useful model context.

I built the custom integration across the NestJS MCP server, Figma retrieval, structured extraction, AI connection, and dashboard. The challenge was preserving useful relationships while bounding large, nested responses.

Linked Figma element

Scope retrieval to the linked frame, section, or page. Validate the reference and handle missing or unavailable nodes.

Retrieval

Validate tool arguments. Combine stored context with background, on-demand, and manual refresh—without webhooks. Balance freshness against API traffic.

Structured extraction

Select relevant fields, traverse useful child nodes, and limit depth. Retrieve deeper details separately when the task needs them.

Model context

Split large outputs into manageable parts and fetch additional details on demand. Preserve relationships when assembling context.

Documentation draft

Combine design information and contribution notes for AI-assisted drafting, followed by collaborative review and refinement.

Built to keep
building.

I migrated the existing Express.js backend to NestJS alongside ongoing feature development. The value was a stronger foundation for the work that followed.

THE STARTING POINT

Express.js

An existing product.
Features still moving forward.

THE NEXT FOUNDATION

NestJS.

A backend I could extend as my responsibilities grew.

WHAT THE MIGRATION ENABLED
01

Continue shipping features.

A more useful development foundation for extending the product alongside the migration.

02

Support widget data.

Made it easier for me to manage widget data as I later took over maintenance.

03

Adapt with the experience.

Support for changing UX flows as my work expanded across the backend and frontend.

DELIVERY & INFRASTRUCTURE

Docker-based deployments to Heroku and Google Cloud Platform, with GitHub Actions among the project’s delivery tools.

DockerHerokuGoogle Cloud PlatformGitHub Actions

Shipped together.
Learned at the edges.

The most demanding problems appeared where systems met.

Dynamic data entering a collaborative editor. Queued work meeting an external API limit. Complex design structures becoming model context.

01

Connected workflows

Shipped Playground, Manifest, dashboard functionality, AI documentation, and the custom Figma MCP integration; later maintained the existing widget.

02

More consistent editing

Addressed the observed collaborative duplication race by coordinating the protected update paths.

03

User-specific recovery

Added persisted cooldowns so affected background jobs could wait while other users continued.

04

Less manual assembly

Automated parts of collecting design context and preparing documentation drafts for review.

05

Continued feature development

Improved the development foundation for widget data management and UX flow changes through the NestJS migration.

06

AI in customer beta

Delivered the connected AI workflow to customer beta, bringing Figma context into the contribution and documentation process.

PROPOSED NEXT STEPS · NOT COMPLETED WORK

Evaluate the whole task.

Build a representative AI evaluation set covering nested components, missing nodes, changed properties, and stale context. Assess correctness, relevance, coverage, and the editing needed before use.

Collaboration, recovery, and delivery

Turn simultaneous editing and reordering into a repeatable regression test, including reconnects and delayed updates. Document the coordination boundary so future code does not bypass it.

Measure background job completion, cooldown deferrals, and recovery time. Compare issue and PR histories when assessing delivery, accounting for scope differences.

Benchmark the complete documentation task: gathering information, drafting, reviewing, and correcting. Generation time alone misses the cost of an inaccurate answer.

Make coordination explicit.
Model restrictions as state.
Evaluate the answer, not just the retrieval.

Sources and scope

Based on my engineering notes, clarifications, and the three supplied product screenshots. Public context: Compfeed, the contribution process, Figma Community widget, and LinkedIn.

Public pages were reviewed on 4 October 2026, after my involvement ended. They do not establish that every current feature existed during my tenure or was built by me. Screenshots are not dated release evidence. No adoption, revenue, or performance metrics are claimed.

Release and measurement scope. The AI integration reached customer beta; some answers were incorrect or irrelevant and required human review. Time savings, delivery-speed improvements, and runtime performance were not measured. The NestJS migration’s value is described from my development experience.

Engineering boundaries. The mutex coordinated protected update paths; a local mutex alone does not guarantee global distributed consistency. Cooldown handling is confirmed for background synchronization, not every interactive MCP request. The listed technologies span my work and did not all form one request path.

Visual evidence. Product captures are cropped to remove browser chrome and focus on relevant features. They are not dated release evidence or demonstrations of successful AI output. Manifest is a labeled schematic, not a screenshot or generated document. My involvement ended on 20 January 2026.

Back to selected workLet’s talk

Product screenshot

Enlarged Compfeed product screenshot