Projects

Open source projects and personal work.

Featured Projects

A privacy-focused, self-hosted web analytics platform built on Microsoft Orleans for horizontal scalability.

A complete web analytics solution that enables organizations to track visitor behavior across multiple applications without relying on third-party data sharing. Features real-time monitoring, funnel analysis, cohort retention tracking, and custom event recording—all while keeping data private and under your control.

.NETMicrosoft OrleansPostgreSQLAzure Tables.NET AspireBootstrapChart.js

Key Features

  • Multi-application tracking from a unified dashboard
  • Real-time visitor monitoring with sharded architecture
  • Page analytics with views, bounce rates, and time tracking
  • Traffic source identification with referrer and UTM tracking

A .NET library that brings automatic indexing and LINQ-based querying to Microsoft Orleans grains using PostgreSQL.

Built with Claude Opus 4.5 in just a few hours, this library solves a problem I had been trying to tackle for over 3 years. It uses source generators to provide zero-boilerplate integration between Orleans grain state and PostgreSQL full-text search.

.NETMicrosoft OrleansPostgreSQLC#Source GeneratorsEF Core

Key Features

  • Automatic state-to-index sync via storage decorator pattern
  • Attribute-based indexing with [Searchable] and [Queryable]
  • LINQ queries: .Search<IGrain>().Where(...).ToListAsync()
  • Compile-time code generation for zero runtime overhead

A self-hosted email management platform that avoids expensive per-email costs from commercial services.

A cloud-native email service built on Microsoft Orleans and ASP.NET Core. Runs your own SMTP server without per-email fees. Supports multiple mailboxes, shared folders with granular permissions, full-text search, and JWT authentication. Deploy to Azure Container Apps for horizontal scaling.

.NET 10ASP.NET CoreMicrosoft Orleans.NET AspirePostgreSQLAzure Container AppsAzure StorageTypeScript

Key Features

  • RESTful API for full email management
  • Multi-mailbox support with folder organization (Inbox, Sent, Drafts, Trash, Spam)
  • Shared mailboxes with granular permissions (Read/Write/Admin)
  • Full-text search for emails by content, recipient, or status

A multi-tenant OAuth2/OpenID Connect identity provider built with .NET 10, Microsoft Orleans, and .NET Aspire.

A scalable identity platform using Orleans virtual actors for distributed state management. Supports complete tenant isolation, organization hierarchies, and role-based access control.

.NETMicrosoft Orleans.NET AspireC#PostgreSQLAzure StorageOpenTelemetry

Key Features

  • Multi-tenant architecture with complete isolation
  • OAuth2/OIDC with authorization code, client credentials, and refresh tokens
  • PKCE support for public clients
  • Organization support with role-based access control

Other Projects

A first-party product review site with honest, spec-grounded reviews and buying guides across categories.

A product review publication where every review is written first-party by a named reviewer who knows their category. Rankings are grounded in the specs that matter rather than fabricated ratings, covering categories from baby gear and headphones to tumblers and PC hardware.

Next.jsReactTypeScript

Key Features

  • First-party reviews written by named reviewers
  • Category-based buying guides and rankings
  • Spec-grounded comparisons instead of fabricated ratings
  • Reviewer profiles with per-category expertise

A headless gift-registry service powering wedding wish lists, baby registries, and more across multiple sites.

A multi-tenant registry backend that owns the hard parts of gift registries — item sources, claims, and ownership — so each consumer site only builds its own look and feel. Amazon products are first-class citizens stored by ASIN, any other https product page works as a generic link, and gift claims run transactionally so the same item is never bought twice.

Next.jsReactTypeScript

Key Features

  • Items from any store: Amazon by ASIN plus generic product links
  • Transactional claims so gifts are never double-purchased
  • Lists for every occasion: wedding, baby, birthday, holiday, and more
  • Headless API consumed by multiple frontend sites

A consumer baby-registry app built on the Gift Registry API: curated essentials lists, items from any store, one shareable link.

A baby registry frontend built on top of the Gift Registry API. Parents start from curated essentials lists, add products from any store by pasting a link, and share a single page where friends and family claim gifts — with the claim system guaranteeing nobody shows up with the same stroller.

Next.jsReactTypeScript

Key Features

  • Curated starter checklists of baby essentials
  • Add items from any store by pasting a product link
  • One shareable link for friends and family
  • Claim tracking that prevents duplicate gifts

A wedding-website platform: save-the-date pages, guest RSVP with party and dinner choices, and a planning dashboard on your own domain.

A platform for couples to run their wedding online. Each wedding gets a save-the-date page on its own domain, guest RSVP flows that handle whole parties and dinner selections, and a private planning dashboard for the couple to manage it all.

Next.jsReactTypeScriptDocker

Key Features

  • Save-the-date page on a custom domain per wedding
  • Guest RSVP with party management and dinner choices
  • Private planning dashboard for the couple
  • Multi-wedding platform with sign-in for managing your event

An earlier attempt at Orleans grain indexing using Azure Cognitive Search.

My first attempt at solving grain search in Orleans from 3+ years ago. While functional, I shelved this project due to source generator tooling pain and the complexity of requiring Azure Cognitive Search as a dependency.

.NETMicrosoft OrleansAzure Cognitive SearchC#

Key Features

  • Attribute-based indexing configuration
  • Azure Cognitive Search integration
  • Support for faceted and searchable properties