Skip to content

Case Study

Quill & Pigeon

Full-Stack Software Engineer Co-op · Portland, Maine · Jan 2025 – Aug 2025

Quill & Pigeon storefront featuring handcrafted greeting cards

01

Product overview

Quill & Pigeon helps customers discover, personalize, schedule, and send handwritten cards created by independent New England artists.

I joined as a Full-Stack Software Engineer Co-op and worked across the customer-facing Next.js platform, Medusa commerce services, Stripe subscriptions and payments, AWS Lambda applications, search infrastructure, transactional email, shipping workflows, and context-aware AI agents.

02

My role and areas of ownership

I worked across the Next.js platform, Medusa commerce services, Stripe subscriptions and payments, AWS Lambda applications, search infrastructure, transactional email, shipping workflows, and context-aware AI agents.

Full-stack product development

Built accessible customer experiences for product discovery, personalization, recipients, reminders, subscriptions, checkout, and card delivery using Next.js, React, TypeScript, Prisma, Zod, and PostgreSQL.

Commerce, subscriptions, and card credits

Extended Medusa with custom subscription-credit and payment-provider functionality so customers could redeem included card credits during checkout while Stripe handled subscription and standard payment workflows.

Context-aware AI workflows

Built AI-powered customer workflows using the OpenAI API and Claude API, including an MCP server that provided agents with user context such as subscription tier and available card credits.

Platform integrations and delivery

Developed AWS Lambda services with Kysely, integrated Meilisearch and USPS delivery estimates, and improved CI/CD and local GitHub Actions testing with OIDC and act.

03

Results and impact

Users supported
500+Users supported
Transactions processed
1,000+Transactions processed
Faster page loads and processing
50%Faster page loads and processing
Accessible customer experience
WCAG 2.2 AAAccessible customer experience

04

Full-stack customer experience

Built accessible customer workflows across product discovery, personalization, recipients, reminders, subscriptions, checkout, and card delivery using Next.js, React, TypeScript, Prisma, Zod, Medusa, and PostgreSQL.

These flows connected the storefront to commerce and fulfillment services so customers could discover cards, personalize them, manage recipients and important-date reminders, subscribe, check out, and track delivery — all with an accessible, WCAG 2.2 AA experience.

05

Commerce and subscription-credit architecture

Medusa did not natively support Quill & Pigeon's subscription card-credit model, so I extended its commerce and payment architecture to support it. Customers received card credits based on their subscription tier and could redeem those credits to receive included or free cards during checkout.

Extended Medusa's commerce and payment architecture to support subscription card credits, allowing customers to redeem included cards during checkout while preserving Stripe-based payment workflows for standard purchases and remaining balances.

  • Customers received card credits based on subscription tier.
  • Credits could be used to receive included or free cards.
  • Credit redemption was integrated directly into checkout.
  • Custom Medusa functionality backed the credit model — it is not a native Medusa capability.
  • Custom payment-provider behavior connected Stripe payment workflows and credit redemption.
  • Checkout logic distinguished between credit-funded and standard paid purchases.
  • Subscription lifecycle events updated customer-credit availability.

Custom Stripe payment provider

Built custom payment-provider behavior that integrated subscription card-credit redemption with Stripe-backed payment and checkout workflows. The design keeps three concerns clearly separated: Stripe handled payment processing, the custom provider handled subscription-card credit redemption, and Medusa handled order creation. Card credits are an application-level entitlement — not cryptocurrency or a cash equivalent.

  1. Subscription purchased
  2. Stripe webhook
  3. Subscription tier resolved
  4. Card credits added
  5. Customer selects a card
  6. Checkout evaluates available credits
  7. Custom Medusa payment behavior
  8. Credit redeemed or Stripe payment collected
  9. Order created

06

Context-aware AI and MCP server

Built an MCP server that supplied AI agents with authenticated customer context, including subscription tier, available card credits, and relevant account information, allowing responses and recommendations to reflect the customer's actual product state.

  • The AI could provide account-aware answers.
  • Recommendations could consider the customer's subscription.
  • The agent could determine whether the customer had credits available.
  • Context did not need to be manually copied into each prompt.
  • Context was exposed through controlled MCP tools.
  • The AI did not receive unrestricted database access.

Customer context was exposed through controlled MCP tools rather than direct, unrestricted access to the application database.

Built AI-powered product and support workflows using the OpenAI API and Claude API, with provider failover and customer context supplied through the MCP server. Instrumented these AI workflows with Langfuse for prompt management, cost visibility, tracing, debugging, and understanding agent decisions — Langfuse provides observability around the workflows rather than making AI decisions itself.

  1. Customer request
  2. AI workflow
  3. MCP server
  4. Subscription tier
  5. Available card credits
  6. Relevant account context
  7. OpenAI API or Claude API
  8. Context-aware response

08

Email conversation chaining and human escalation

Implemented email conversation chaining so AI workflows received the relevant conversation history before reacting to inbound messages.

Built conversation-aware inbound email handling that reconstructed the relevant message thread before invoking the AI workflow. Requests the agent could not safely or confidently resolve were escalated to the owners for human follow-up.

  • Inbound emails were associated with their existing conversation.
  • Prior messages were reconstructed or retrieved.
  • The AI received the relevant thread context.
  • The AI attempted to handle the request using the full conversation.
  • Requests that could not be handled safely or confidently were escalated to the business owners.
  • Human owners could continue the existing conversation.

Branded transactional email templates were built with React Email and connected to automated customer workflows, covering communication such as event reminders, order emails, and subscription updates alongside conversation-aware inbound handling.

  1. Inbound email
  2. Conversation identified
  3. Relevant thread reconstructed
  4. Customer context retrieved
  5. AI evaluates and drafts response
  6. Handling decision
  7. Automated response or owner escalation

09

Data-access architecture

Prisma and Kysely served different architectural needs and were not used interchangeably in the same runtime.

Next.js platform application

Used Prisma for typed data access in the Next.js platform and Zod for validating application inputs, API payloads, and workflow boundaries.

PrismaPostgreSQLSupabaseZod

AWS Lambda applications

Used Kysely for typed SQL access in AWS Lambda applications, keeping the serverless data layer lightweight while preserving compile-time query safety.

KyselyAWS LambdaPostgreSQL

10

Shipping and fulfillment integrations

Integrated USPS shipping estimates into the checkout and fulfillment experience so customers could see more accurate delivery expectations. These are estimated delivery windows, not guaranteed delivery dates.

11

CI/CD and developer experience

Configured GitHub Actions workflows with AWS OIDC authentication and used act to run and debug CI workflows locally before pushing changes. act is a local GitHub Actions runner — not an AWS service, a replacement for GitHub Actions, or a production deployment platform.

  • Reduced reliance on long-lived AWS credentials through OIDC authentication.
  • Improved confidence when modifying workflows.
  • Reduced iteration time when debugging GitHub Actions with act.
  • Supported automated testing and AWS deployments.

Validated API and application boundaries with Zod and tested service integrations using Bruno and Postman. Maintained consistent formatting and review quality using Prettier and automated repository checks.

12

Technology stack

Full stack

Next.jsReactTypeScriptPrismaZodPostgreSQLSupabase

Commerce and search

MedusaStripeMeilisearchUSPS APIs

AI and automation

OpenAI APIClaude APIMCPLangfusen8nReact Email

Cloud and backend

AWS LambdaSQSSESKyselyGitHub ActionsOIDC

Developer tooling

BrunoPostmanactPrettierGit

13

Visit live website

Contact

Let's talk

I'm looking for a full-time software engineering role in full-stack web and AI products. If your team needs work like Quill & Pigeon, get in touch.