Projects

Technical registry: problem, system, outcome.

Each entry follows the same structure — Problem, System, Outcome — so you can scan or read deep without relearning the page.

In build

Stiri (A)prinse din Romania

Most news products confuse volume for value. This one is engineered not to.

Problem

Romanian news moves fast and noisily — content is published at high velocity with minimal curation, creating a landscape where the same story appears ten times in ten slightly different forms. The engineering problem isn't acquiring content. It's deciding what clears the bar, then delivering it cleanly.

System

The platform is built around a multi-stage processing pipeline: sources are ingested continuously by BullMQ workers, passed through deduplication and domain-specific quality filters, then queued for an AI rewrite stage before reaching the publish layer. Each stage is discrete and has one responsibility. The Next.js frontend stays deliberately thin — it reads from the Fastify API and does nothing else.

Outcome

A media backend built to handle high-volume content ingestion without letting noise through — infrastructure that can power a product which reads like it was curated, because the pipeline ensures it was.

Live URLURL not public yet
Case study
Source repoRepository not shared publicly
Stiri (A)prinse din Romania visual

Stack

Next.js 16 App Router · React 19 + TypeScript · Tailwind CSS v4 · Fastify REST API · PostgreSQL + Redis · BullMQ workers

Architecture

  • Continuous multi-source ingestion via background BullMQ workers
  • Deduplication and quality filtering as discrete pipeline stages
  • AI rewrite layer runs before content enters the publish queue
  • Raw source content strictly separated from published output
  • Frontend reads only from the Fastify API — no direct data access

Prototype

Avatar Chatbot Platform

Most chat widgets either look generic or behave like needy interns.

Problem

Clients want something embeddable, branded, and safe without forcing their site into a framework migration or an LLM bill they do not control.

System

I built the widget as a single-script, zero-dependency frontend with tenant-level theming, optional video mode, and deterministic chat logic behind Firebase Functions and Firestore. That keeps deployment light and behavior predictable.

Outcome

It behaves like a real platform instead of a one-off embed: multi-tenant, themeable, mobile-aware, and ready to drop into client sites without drama.

Avatar Chatbot Platform visual

Stack

Node.js + TypeScript · Firebase Functions v2 + Express · Cloud Firestore · Firebase Admin SDK · Vanilla JS widget · HeyGen video cache

Architecture

  • Single script embed for client sites
  • Multi-tenant Firestore schema
  • Deterministic keyword scoring with guardrails
  • Runtime theming via CSS vars and derived shades

MVP

QR voting app for events

At live events, friction is not a bug. It is the whole failure mode.

Problem

Voting systems break when the entrance flow is slow, the permissions are fuzzy, or duplicate scans ruin trust in the result. Event products need speed and control at the same time.

System

I designed the app around role-based entry points, Firestore-backed realtime state, and a clean split between presence, unlock, and vote data. QR scanning, deduplication, and volunteer/admin logic were treated as first-class product requirements, not edge cases.

Outcome

The app works like an event tool, not a hackathon toy: scan, unlock, vote, track live progress, and keep the workflow understandable for the people actually running the room.

Live URLURL not public yet
Case study
Source repoRepository not shared publicly
QR voting app for events visual

Stack

React 19 + TypeScript · Vite 7 + React Router · Firebase SDK v12 · Cloud Firestore + Hosting · @zxing/browser QR scanning · PWA + service worker

Architecture

  • Role-based access with route guards
  • Multi-step event flow for scan, unlock, admin vote
  • Duplicate prevention and domain-specific validation
  • Presence, unlock, and vote data separated in Firestore

Exploring

Future finance news site

Finance news has an attention problem disguised as an information problem.

Problem

Readers get a flood of headlines, recycled takes, and weak interfaces. What is missing is a product that turns speed into clarity instead of panic.

System

This concept starts from editorial positioning and product shape first: faster context, better visual hierarchy, and a trust layer that treats credibility as a feature.

Outcome

The goal is a finance media surface that feels sharper, calmer, and more useful than the usual hype conveyor belt.

Live URLURL not public yet
Case study
Source repoRepository not shared publicly
Future finance news site visual

Stack

Concept and research phase · Media product strategy · Future extensible pipeline

Architecture

  • Planned for signal-first content packaging
  • Designed to support future media workflows
  • Built around credibility and repeat visits