Domain / Industry: Education

Full-stack developer · Jan 2021 – Jul 2021 · ~6 mo

Problem

Professionals who write Letters of Recommendation often manage many requests at once — each with different deadlines, document requirements, sending destinations, and follow-up needs. Tracking this through scattered emails, attachments, and manual to-do lists leads to missed deadlines, lost context, no way to prioritize by urgency, security risks from unsecured attachments, and no clear view of which recommendations are requested, in progress, or completed. Supports academic recommendation workflows (professors, graduate applications) as well as professional references from managers and mentors.

Approach

Designed and built a subscription-based SaaS platform with a layered, API-first architecture spanning marketing site, authenticated dashboard, and background workers.

  • Backend: Node.js and Express REST API with JWT authentication (access + refresh token rotation), Passport.js, role-based authorization (Admin vs User), and MongoDB via Mongoose.
  • Public site: Server-rendered Handlebars pages (Home, About, Pricing, FAQ, How It Works, etc.) for SEO-friendly marketing and registration.
  • Admin dashboard: Angular 12 SPA with lazy-loaded feature modules, route guards, HTTP interceptors, server-side pagination, filtering, and full-text search.
  • Workflow: Kanban-style LOR lifecycle — Request → In Progress → Completed — with priority levels, private notes, and automated email when an LOR is marked complete.
  • Documents: Token-secured public upload forms; files stored in Azure Blob Storage with size limits; on-the-fly ZIP download of all documents for an LOR.
  • Invitations: JWT-signed upload links (1-year expiry), resend/regenerate, status tracking, and referential integrity when linked to active LORs.
  • Payments: Stripe integration for monthly and annual plans — customer creation, payment methods, subscriptions, promo codes, tax rates, and webhook handlers for subscription and invoice events.
  • Email: SendGrid transactional templates for invitations, completion notices, due-date reminders, payment receipts, and payment failure alerts (with unsubscribe links).
  • Automation: Azure Functions timer jobs — daily LOR due-date reminders (7 days before deadline, grouped by issuer) and Stripe webhook event cleanup.
  • Security: Helmet.js with Content Security Policy, bcrypt password hashing, MongoDB-backed sessions, and input validation across models.

Outcomes

Delivered an end-to-end product I designed, built, and operate solo: a centralized platform where mentors, managers, professors, and recruiters can invite requesters, track LOR progress, communicate from the dashboard, and securely store submitted documents — with subscription billing and automated reminders handled in production.

Updated Jul 15, 2026